所有 Spark SQL DataType 的 Scala 类型映射是啥

Posted

技术标签:

【中文标题】所有 Spark SQL DataType 的 Scala 类型映射是啥【英文标题】:What is the Scala type mapping for all Spark SQL DataType所有 Spark SQL DataType 的 Scala 类型映射是什么 【发布时间】:2015-12-30 05:21:23 【问题描述】:

可在 here 中找到可用于 Spark SQL 的不同 DataTypes。谁能告诉我每个 Spark SQL 的DataTypes 对应的 Java/Scala 数据类型是什么?

【问题讨论】:

【参考方案1】:

直接来自Spark SQL and DataFrame Guide:

Data type       |    Value type in Scala
------------------------------------------------
ByteType        |    Byte   
ShortType       |    Short  
IntegerType     |    Int    
LongType        |    Long   
FloatType       |    Float  
DoubleType      |    Double     
DecimalType     |    java.math.BigDecimal
StringType      |    String
BinaryType      |    Array[Byte]
BooleanType     |    Boolean 
TimestampType   |    java.sql.Timestamp
DateType        |    java.sql.Date
ArrayType       |    scala.collection.Seq   
MapType         |    scala.collection.Map   
StructType      |    org.apache.spark.sql.Row

【讨论】:

Java 有这样的映射吗?【参考方案2】:

对于那些试图查找 Java 类型的人,它们现在也托管在来自zero323's answer 的链接中。要在此处记录当前版本:

Data type     |    Value type in Java              |    API to access or create a data type
-------------------------------------------------------------------------------------------
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() or DataTypes.createDecimalType(precision, scale).
StringType    |    String                          |    DataTypes.StringType
BinaryType    |    byte[]                          |    DataTypes.BinaryType
BooleanType   |    boolean or Boolean              |    DataTypes.BooleanType
TimestampType |    java.sql.Timestamp              |    DataTypes.TimestampType
DateType      |    java.sql.Date                   |    DataTypes.DateType
ArrayType     |    java.util.List                  |    DataTypes.createArrayType(elementType) or DataTypes.createArrayType(elementType, containsNull).
MapType       |    java.util.Map                   |    DataTypes.createMapType(keyType, valueType) or DataTypes.createMapType(keyType, valueType, valueContainsNull)
StructType    |    org.apache.spark.sql.Row        |    DataTypes.createStructType(fields)
StructField   |    The value type in Java of the   |    DataTypes.createStructField(name, dataType, nullable)
              |    data type of this field (For    |
              |    example, int for a StructField  |
              |    with the data type IntegerType) |

在使用 StructTypes 时需要特别注意的一点 - 如果您希望在另一个中声明一个空的 StructType 作为占位符值,您必须使用 new StructType() 而不是建议的 DataTypes.createStructType((StructField)null) 来防止 null指针。记得在使用之前用 StructFields 实例化嵌套的 StructType。

【讨论】:

以上是关于所有 Spark SQL DataType 的 Scala 类型映射是啥的主要内容,如果未能解决你的问题,请参考以下文章

[Spark]What's the difference between spark.sql.shuffle.partitions and spark.default.parallelism?

What’s new for Spark SQL in Apache Spark 1.3(中英双语)

如何使用 Spark SQL 作为内存数据库?

sql 表结构

在执行spar-sql程序中报错:java.lang.NoSuchMethodError: org.apache.spark.internal.Logging.$init$(Lorg/apache/s

spark sql 小样