【spark床头书系列】Spark数据类型官网权威详解

Spark数据类型官网权威详解

一、数据类型

Spark SQL和DataFrames支持以下数据类型:

  • 数值类型
    • ByteType:表示1字节有符号整数。数字范围为-128127
    • ShortType:表示2字节有符号整数。数字范围为-3276832767
    • IntegerType:表示4字节有符号整数。数字范围为-21474836482147483647
    • LongType:表示8字节有符号整数。数字范围为-92233720368547758089223372036854775807
    • FloatType:表示4字节单精度浮点数。
    • DoubleType:表示8字节双精度浮点数。
    • DecimalType:表示任意精度的有符号十进制数。在内部由java.math.BigDecimal支持。BigDecimal由一个任意精度的整数无标度值和一个32位整数标度组成。
  • 字符串类型
    • StringType:表示字符字符串值。
  • 二进制类型
    • BinaryType:表示字节序列值。
  • 布尔类型
    • BooleanType:表示布尔值。
  • 日期时间类型
    • TimestampType:表示由年、月、日、小时、分钟和秒组成的值。
    • DateType:表示由年、月、日组成的值。
  • 复杂类型
    • ArrayType(elementType, containsNull):表示由具有elementType类型的元素序列组成的值。containsNull用于指示ArrayType值中的元素是否可以为null
    • MapType(keyType, valueType, valueContainsNull):表示由一组键值对组成的值。键的数据类型由keyType描述,值的数据类型由valueType描述。对于MapType值,键不允许有null值。valueContainsNull用于指示MapType值的值是否可以为null
    • StructType(fields):表示具有由StructField(fields)序列描述的结构的值。
      • StructField(name, dataType, nullable):表示StructType中的字段。字段的名称由name指示。字段的数据类型由dataType指示。nullable用于指示此字段的值是否可以为null

二、访问源码

Spark SQL的所有数据类型都位于包org.apache.spark.sql.types中。您可以通过以下方式访问它们:

Scala:

import org.apache.spark.sql.types._

Java:

import org.apache.spark.sql.types.*;

Python:

from pyspark.sql.types import *

R:

library(SparkR)

三、多语言数据类型映射

下表列出了各个语言中的数据类型及其对应的值类型和API:

1. Scala中的数据类型和访问或创建数据类型的API:

数据类型Scala中的值类型访问或创建数据类型的API
ByteTypeByteByteType()
ShortTypeShortShortType()
IntegerTypeIntIntegerType()
LongTypeLongLongType()
FloatTypeFloatFloatType()
DoubleTypeDoubleDoubleType()
DecimalTypejava.math.BigDecimalDecimalType()
StringTypeStringStringType()
BinaryTypeArray[Byte]BinaryType()
BooleanTypeBooleanBooleanType()
TimestampTypejava.sql.TimestampTimestampType()
DateTypejava.sql.DateDateType()
ArrayTypescala.collection.SeqArrayType(elementType, containsNull)
MapTypescala.collection.MapMapType(keyType, valueType, valueContainsNull)
StructTypeorg.apache.spark.sql.RowStructType(fields)
StructField数据类型的值类型(例如,Int对于数据类型为IntegerType的StructField)StructField(name, dataType, nullable)

2.Java中的数据类型和访问或创建数据类型的API:

数据类型Java中的值类型访问或创建数据类型的API
ByteTypebyte或ByteDataTypes.ByteType
ShortTypeshort或ShortDataTypes.ShortType
IntegerTypeint或IntegerDataTypes.IntegerType
LongTypelong或LongDataTypes.LongType
FloatTypefloat或FloatDataTypes.FloatType
DoubleTypedouble或DoubleDataTypes.DoubleType
DecimalTypejava.math.BigDecimalDataTypes.createDecimalType()
DataTypes.createDecimalType(precision, scale)
StringTypeStringDataTypes.StringType
BinaryTypebyte[]DataTypes.BinaryType
BooleanTypeboolean或BooleanDataTypes.BooleanType
TimestampTypejava.sql.TimestampDataTypes.TimestampType
DateTypejava.sql.DateDataTypes.DateType
ArrayTypejava.util.ListDataTypes.createArrayType(elementType)
注意:containsNull的值将为true
DataTypes.createArrayType(elementType, containsNull)
MapTypejava.util.MapDataTypes.createMapType(keyType, valueType)
注意:valueContainsNull的值将为true
DataTypes.createMapType(keyType, valueType, valueContainsNull)
StructTypeorg.apache.spark.sql.RowDataTypes.createStructType(fields)
注意:fields是一个StructFields的List或数组,不允许有相同名称的两个字段
StructField字段的Java值类型
(例如,整数对应数据类型IntegerType)
DataTypes.createStructField(name, dataType, nullable)

3.Python中的数据类型和访问或创建数据类型的API:

数据类型Python中的值类型访问或创建数据类型的API
ByteTypeint或longByteType()
ShortTypeint或longShortType()
IntegerTypeint或longIntegerType()
LongTypelongLongType()
FloatTypefloatFloatType()
DoubleTypefloatDoubleType()
DecimalTypedecimal.DecimalDecimalType()
StringTypestringStringType()
BinaryTypebytearrayBinaryType()
BooleanTypeboolBooleanType()
TimestampTypedatetime.datetimeTimestampType()
DateTypedatetime.dateDateType()
ArrayTypelist、tuple或arrayArrayType(elementType, [containsNull])
注意:containsNull的默认值为True
MapTypedictMapType(keyType, valueType, [valueContainsNull])
注意:valueContainsNull的默认值为True
StructTypelist或tupleStructType(fields)
注意:fields是一个StructFields的Seq,不允许有相同名称的两个字段
StructField字段的Python值类型
(例如,整数对应数据类型IntegerType)
StructField(name, dataType, [nullable])
注意:nullable的默认值为True

4.R中的数据类型和访问或创建数据类型的API:

数据类型R中的值类型访问或创建数据类型的API
ByteTypeinteger“byte”
ShortTypeinteger“short”
IntegerTypeinteger“integer”
LongTypeinteger“long”
FloatTypenumeric“float”
DoubleTypenumeric“double”
DecimalType不支持不支持
StringTypecharacter“string”
BinaryTyperaw“binary”
BooleanTypelogical“bool”
TimestampTypePOSIXct“timestamp”
DateTypeDate“date”
ArrayTypevector或listlist(type=“array”, elementType=elementType, containsNull=[containsNull])
注意:containsNull的默认值为TRUE
MapTypeenvironmentlist(type=“map”, keyType=keyType, valueType=valueType, valueContainsNull=[valueContainsNull])
注意:valueContainsNull的默认值为TRUE
StructTypenamed listlist(type=“struct”, fields=fields)
注意:fields是一个StructFields的Seq,不允许有相同名称的两个字段
StructField字段的R值类型
(例如,整数对应数据类型IntegerType)
list(name=name, type=dataType, nullable=[nullable])
注意:nullable的默认值为TRUE

四、NaN语义:

  • NaN = NaN 返回true。
  • 在聚合操作中,所有的NaN值会被分组在一起。
  • NaN在连接键中被视为正常值。
  • 当按升序排列时,NaN值会排在最后,比任何其他数值都大。

五、算术运算:

对于数字类型(除了decimal),不会检查溢出的情况。这意味着如果一个操作导致溢出,在Java/Scala程序中返回的结果与该操作相同(例如,如果两个整数相加的和超过了可表示的最大值,结果将是一个负数)。

六、官网链接

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

BigDataMLApplication

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值