データ型

サポートされているデータ型

Spark SQL および DataFrame は、以下のデータ型をサポートしています。

Spark SQL のすべてのデータ型は、pyspark.sql.types パッケージにあります。次のようにアクセスできます。

from pyspark.sql.types import *
データ型 Python での値の型 データ型にアクセスまたは作成するための API
ByteType int
注意: 数値は実行時に 1 バイト符号付き整数に変換されます。数値が -128 から 127 の範囲内にあることを確認してください。
ByteType()
ShortType int
注意: 数値は実行時に 2 バイト符号付き整数に変換されます。数値が -32768 から 32767 の範囲内にあることを確認してください。
ShortType()
IntegerType int IntegerType()
LongType int
注意: 数値は実行時に 8 バイト符号付き整数に変換されます。数値が -9223372036854775808 から 9223372036854775807 の範囲内にあることを確認してください。そうでない場合は、データを decimal.Decimal に変換して DecimalType を使用してください。
LongType()
FloatType float
注意: 数値は実行時に 4 バイト単精度浮動小数点数に変換されます。
FloatType()
DoubleType float DoubleType()
DecimalType decimal.Decimal DecimalType()
StringType str StringType()
CharType(length) str CharType(length)
VarcharType(length) str VarcharType(length)
BinaryType bytearray BinaryType()
BooleanType bool BooleanType()
TimestampType datetime.datetime TimestampType()
TimestampNTZType datetime.datetime TimestampNTZType()
DateType datetime.date DateType()
DayTimeIntervalType datetime.timedelta DayTimeIntervalType()
ArrayType list, tuple, or array ArrayType(elementType, [containsNull])
注意: containsNull のデフォルト値は True です。
MapType dict MapType(keyType, valueType, [valueContainsNull])
注意: valueContainsNull のデフォルト値は True です。
StructType list or tuple StructType(fields)
注意: fields は StructFields のシーケンスです。また、同じ名前の 2 つのフィールドは許可されません。
StructField このフィールドのデータ型の Python での値の型
(例: IntegerType のデータ型を持つ StructField の Int)
StructField(name, dataType, [nullable])
注意: nullable のデフォルト値は True です。

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 String StringType
CharType(length) String CharType(length)
VarcharType(length) String VarcharType(length)
BinaryType Array[Byte] BinaryType
BooleanType Boolean BooleanType
TimestampType java.time.Instant or java.sql.Timestamp TimestampType
TimestampNTZType java.time.LocalDateTime TimestampNTZType
DateType java.time.LocalDate or 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 のシーケンスです。また、同じ名前の 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 or Byte DataTypes.ByteType
ShortType short or Short DataTypes.ShortType
IntegerType int or Integer DataTypes.IntegerType
LongType long or Long DataTypes.LongType
FloatType float or Float DataTypes.FloatType
DoubleType double or Double DataTypes.DoubleType
DecimalType java.math.BigDecimal DataTypes.createDecimalType()
DataTypes.createDecimalType(precision, scale)。
StringType String DataTypes.StringType
CharType(length) String DataTypes.createCharType(length)
VarcharType(length) String DataTypes.createVarcharType(length)
BinaryType byte[] DataTypes.BinaryType
BooleanType boolean or Boolean DataTypes.BooleanType
TimestampType java.time.Instant or java.sql.Timestamp DataTypes.TimestampType
TimestampNTZType java.time.LocalDateTime DataTypes.TimestampNTZType
DateType java.time.LocalDate or java.sql.Date DataTypes.DateType
YearMonthIntervalType java.time.Period DataTypes.YearMonthIntervalType
DayTimeIntervalType java.time.Duration DataTypes.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 は StructFields の List または配列です。また、同じ名前の 2 つのフィールドは許可されません。
StructField このフィールドのデータ型の Java での値の型 (例: IntegerType のデータ型を持つ StructField の int) DataTypes.createStructField(name, dataType, nullable)
データ型 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”
ArrayType vector or list list(type=”array”, elementType=elementType, containsNull=[containsNull])
注意: containsNull のデフォルト値は TRUE です。
MapType environment list(type=”map”, keyType=keyType, valueType=valueType, valueContainsNull=[valueContainsNull])
注意: valueContainsNull のデフォルト値は TRUE です。
StructType named list list(type=”struct”, fields=fields)
注意: fields は StructFields のシーケンスです。また、同じ名前の 2 つのフィールドは許可されません。
StructField このフィールドのデータ型の R での値の型 (例: IntegerType のデータ型を持つ StructField の integer) list(name=name, type=dataType, nullable=[nullable])
注意: nullable のデフォルト値は TRUE です。

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

データ型 SQL 名
BooleanType BOOLEAN
ByteType BYTE, TINYINT
ShortType SHORT, SMALLINT
IntegerType INT, INTEGER
LongType LONG, BIGINT
FloatType FLOAT, REAL
DoubleType DOUBLE
DateType DATE
TimestampType TIMESTAMP, TIMESTAMP_LTZ
TimestampNTZType TIMESTAMP_NTZ
StringType STRING
CharType(length) CHAR(length)
VarcharType(length) VARCHAR(length)
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, …>
注意: 「:」はオプションです。
MapType MAP<key_type, value_type>

浮動小数点特殊値

Spark SQL は、大文字/小文字を区別せずに、いくつかの特殊な浮動小数点値をサポートしています。

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

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

NaN のセマンティクス

標準の浮動小数点セマンティクスと正確に一致しない float または double 型を扱う場合、非数 (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')),
  (2, double('infinity')),
  (3, double('inf')),
  (4, double('-inf')),
  (5, double('NaN')),
  (6, double('NaN')),
  (7, double('-infinity'))
;
SELECT COUNT(*), c2
FROM test
GROUP BY c2
ORDER BY c2;
+---------+---------+
| count(1)|       c2|
+---------+---------+
|        2|-Infinity|
|        3| Infinity|
|        2|      NaN|
+---------+---------+