データの種類

サポートされるデータ型

Spark SQL と DataFrames は以下のデータタイプをサポートします:

Spark SQLの全てのデータタイプは org.apache.spark.sql.typesパッケージの中にあります。以下のようにしてアクセスすることができます

import org.apache.spark.sql.types._
例の完全なコードは Spark のリポジトリの "examples/src/main/scala/org/apache/spark/examples/sql/SparkSQLExample.scala" で見つかります。
データタイプ Scalaでの値のタイプ データタイプにアクセスあるいは生成するためのAPI
ByteType Byte ByteType
ShortType Short ShortType
IntegerType Int IntegerType
LongType Long LongType
FloatType Float FloatType
DoubleType Double DoubleType
DecimalType java.math.BigDecimal DecimalType
StringType 文字列 StringType
BinaryType Array[Byte] BinaryType
BooleanType 真偽値 BooleanType
TimestampType java.sql.Timestamp TimestampType
DateType java.sql.Date DateType
YearMonthIntervalType java.time.Period YearMonthIntervalType
DayTimeIntervalType java.time.Duration DayTimeIntervalType
ArrayType scala.collection.Seq ArrayType(elementType, [containsNull])
注意: containsNull のデフォルト値は true です。
MapType scala.collection.Map MapType(keyType, valueType, [valueContainsNull])
注意: valueContainsNull のデフォルト値は true です。
StructType org.apache.spark.sql.Row StructType(fields)
注意: fields は StructFields の Seq です。また、同じ名前の2つのフィールドは許されません。
StructField このフィールドのデータタイプのScalaでの値のタイプ(例えば、データタイプ IntegerTypeのStructFieldのためのInt) StructField(name, dataType, [nullable])
注意: nullable のデフォルト値は true です。

Spark SQLの全てのデータタイプは org.apache.spark.sql.typesのパッケージ内にあります。データタイプにアクセスあるいは生成するには、org.apache.spark.sql.types.DataTypesで提供されるファクトリーメソッドを使ってください。

データタイプ Javaでの値タイプ データタイプにアクセスあるいは生成するためのAPI
ByteType byte あるいは Byte DataTypes.ByteType
ShortType short あるいは Short DataTypes.ShortType
IntegerType int あるいは Integer DataTypes.IntegerType
LongType long あるいは Long DataTypes.LongType
FloatType float あるいは Float DataTypes.FloatType
DoubleType double あるいは Double DataTypes.DoubleType
DecimalType java.math.BigDecimal DataTypes.createDecimalType()
DataTypes.createDecimalType(precision, scale).
StringType 文字列 DataTypes.StringType
BinaryType byte[] DataTypes.BinaryType
BooleanType boolean あるいは Boolean DataTypes.BooleanType
TimestampType java.sql.Timestamp DataTypes.TimestampType
DateType java.sql.Date DataTypes.DateType
YearMonthIntervalType java.time.Period YearMonthIntervalType
DayTimeIntervalType java.time.Duration DayTimeIntervalType
ArrayType java.util.List DataTypes.createArrayType(elementType)
注意: containsNull の値は true です。
DataTypes.createArrayType(elementType, containsNull).
MapType java.util.Map DataTypes.createMapType(keyType, valueType)
注意: valueContainsNull の値は true です。
DataTypes.createMapType(keyType, valueType, valueContainsNull)
StructType org.apache.spark.sql.Row DataTypes.createStructType(fields)
注意: fields は List あるいは StructFields の配列です。また、おなじ名前は許されません。
StructField このフィールドのデータタイプのJavaでの値のタイプ(例えば、データタイプ IntegerTypeのStructFieldのためのint) DataTypes.createStructField(name, dataType, nullable)

Spark SQLの全てのデータタイプは pyspark.sql.typesパッケージ内にあります。以下のようにしてアクセスすることができます

from pyspark.sql.types import *
データタイプ Pythonでの値タイプ データタイプにアクセスあるいは生成するためのAPI
ByteType int or long
注意: 実行時に数値は1バイトの符号あり数値に変換されるでしょう。数値は-128から127の範囲にあるようにしてください。
ByteType()
ShortType int or long
注意: 実行時に数値は2バイトの符号あり数値に変換されるでしょう。数値は-32768から32767の範囲にあるようにしてください。
ShortType()
IntegerType int あるいは long IntegerType()
LongType long
注意: 実行時に数値は8バイトの符号あり数値に変換されるでしょう。数値が-9223372036854775808から9223372036854775807の範囲内にあることを確認してください。それ以外の場合は、データをdecimal.Decimalに変換し、DecimalTypeを使用してください。
LongType()
FloatType float
注意: 実行時に数値は4バイトの符号あり単精度浮動小数点に変換されるでしょう。
FloatType()
DoubleType float DoubleType()
DecimalType decimal.Decimal DecimalType()
StringType 文字列 StringType()
BinaryType bytearray BinaryType()
BooleanType bool BooleanType()
TimestampType datetime.datetime TimestampType()
DateType datetime.date DateType()
ArrayType リスト、組、あるいは配列 ArrayType(elementType, [containsNull])
注意: containsNull のデフォルト値は true です。
MapType dict MapType(keyType, valueType, [valueContainsNull])
注意: valueContainsNull のデフォルト値は true です。
StructType リストあるいは組 StructType(fields)
注意: fields は StructFields の Seq です。また、同じ名前の2つのフィールドは許されません。
StructField このフィールドのデータ型の Python での値の型
(例えば、データタイプ IntegerType の StructField のための Int)
StructField(name, dataType, [nullable])
注意: nullable のデフォルト値は true です。
データタイプ Rでの値のタイプ データタイプにアクセスあるいは生成するためのAPI
ByteType integer
注意: 実行時に数値は1バイトの符号あり数値に変換されるでしょう。数値は-128から127の範囲にあるようにしてください。
“byte”
ShortType integer
注意: 実行時に数値は2バイトの符号あり数値に変換されるでしょう。数値は-32768から32767の範囲にあるようにしてください。
“short”
IntegerType integer “integer”
LongType integer
注意: 実行時に数値は8バイトの符号あり数値に変換されるでしょう。数値は-9223372036854775808 から 9223372036854775807の範囲にあるようにしてください。そうでなければ、データをdecimal.Decimalに変換し、DecimalTypeを使ってください。
“long”
FloatType numeric
注意: 実行時に数値は4バイトの符号あり単精度浮動小数点に変換されるでしょう。
“float”
DoubleType numeric “double”
DecimalType サポートされません。 サポートされません。
StringType character “string”
BinaryType raw “binary”
BooleanType logical “bool”
TimestampType POSIXct “timestamp”
DateType Date “date”
ArrayType vector あるいは list list(type=”array”, elementType=elementType, containsNull=[containsNull])
注意: containsNull のデフォルト値は TRUE です。
MapType environment list(type=”map”, keyType=keyType, valueType=valueType, valueContainsNull=[valueContainsNull])
注意: valueContainsNull のデフォルト値は TRUE です。
StructType 名前付きリスト list(type=”struct”, fields=fields)
注意: fields は StructFields の Seq です。また、同じ名前の2つのフィールドは許されません。
StructField このフィールドのデータタイプのRでの値のタイプ(例えば、データタイプIntegerTypeのStructFieldのためのinteger) list(name=name, type=dataType, nullable=[nullable])
注意: nullable のデフォルト値は TRUE です。

以下の表は、各データ型の Spark SQL パーサで使われる型名と、エイリアスを示しています。

データタイプ SQL name
BooleanType BOOLEAN
ByteType BYTE, TINYINT
ShortType SHORT, SMALLINT
IntegerType INT, INTEGER
LongType LONG, BIGINT
FloatType FLOAT, REAL
DoubleType DOUBLE
DateType DATE
TimestampType TIMESTAMP
StringType STRING
BinaryType BINARY
DecimalType DECIMAL, DEC, NUMERIC
YearMonthIntervalType INTERVAL YEAR, INTERVAL YEAR TO MONTH, INTERVAL MONTH
DayTimeIntervalType INTERVAL DAY, INTERVAL DAY TO HOUR, INTERVAL DAY TO MINUTE, INTERVAL DAY TO SECOND, INTERVAL HOUR, INTERVAL HOUR TO MINUTE, INTERVAL HOUR TO SECOND, INTERVAL MINUTE, INTERVAL MINUTE TO SECOND, INTERVAL SECOND
ArrayType ARRAY<element_type>
StructType STRUCT<field1_name: field1_type, field2_name: field2_type, …>
Note: ‘:’ is optional.
MapType MAP<key_type, value_type>

浮動小数点の特別な値

Spark SQL は幾つかの大文字小文字を区別しない形式の特別な浮動小数点値をサポートします:

正/負の無限セマンティクス

正と負の無限大には特別な処理があります。それらには以下のセマンティクスがあります:

NaN セマンティクス

標準の浮動小数点の記号に正確の一致しない float あるいは double タイプを扱う時に、not-a-number (NAN)の特別な処理があります。具体的には:

SELECT double('infinity') AS col;
+--------+
|     col|
+--------+
|Infinity|
+--------+

SELECT float('-inf') AS col;
+---------+
|      col|
+---------+
|-Infinity|
+---------+

SELECT float('NaN') AS col;
+---+
|col|
+---+
|NaN|
+---+

SELECT double('infinity') * 0 AS col;
+---+
|col|
+---+
|NaN|
+---+

SELECT double('-infinity') * (-1234567) AS col;
+--------+
|     col|
+--------+
|Infinity|
+--------+

SELECT double('infinity') < double('NaN') AS col;
+----+
| col|
+----+
|true|
+----+

SELECT double('NaN') = double('NaN') AS col;
+----+
| col|
+----+
|true|
+----+

SELECT double('inf') = double('infinity') AS col;
+----+
| col|
+----+
|true|
+----+

CREATE TABLE test (c1 int, c2 double);
INSERT INTO test VALUES (1, double('infinity'));
INSERT INTO test VALUES (2, double('infinity'));
INSERT INTO test VALUES (3, double('inf'));
INSERT INTO test VALUES (4, double('-inf'));
INSERT INTO test VALUES (5, double('NaN'));
INSERT INTO test VALUES (6, double('NaN'));
INSERT INTO test VALUES (7, double('-infinity'));
SELECT COUNT(*), c2 FROM test GROUP BY c2;
+---------+---------+
| count(1)|       c2|
+---------+---------+
|        2|      NaN|
|        2|-Infinity|
|        3| Infinity|
+---------+---------+
TOP
inserted by FC2 system