我知道在Scala MapTypes中定义为
public MapType(DataType keyType,
DataType valueType,
boolean valueContainsNull)
但我不知道如何使用Tuple作为keyType,因为允许的DataTypes是
Direct Known Subclasses:
ArrayType, BinaryType, BooleanType, CalendarIntervalType, DateType, HiveStringType, MapType, NullType, NumericType, ObjectType, StringType, StructType, TimestampType
如何使用Tuple作为MapType的keyType?
答案 0 :(得分:2)
“元组类型”是StructType
所以例如(String, Double)
是一个结构:
StructType(Seq(
StructField("_1", StringType, true),
StructField("_2", DoubleType, false)))
使用StructField
个对象枚举字段。
请记住,架构通常适用于Row
个对象:
val schema = StructType(Seq(StructField("map", MapType(
StructType(Seq(
StructField("_1", StringType, true),
StructField("_2", DoubleType, false))),
LongType))))
spark.createDataFrame(
spark.sparkContext.parallelize(Seq(Row(Map(Row("foo", 1.1D) -> 1L)))),
schema
)
如果数据是严格键入的,则不需要架构
spark.createDataFrame(Seq(Tuple1(Map(( "foo", 1.1D) -> 1L))))
并且不支持混合的强/弱类型对象:
spark.createDataFrame(
spark.sparkContext.parallelize(Seq(Row(Map(( "foo", 1.1D) -> 1L)))),
schema
)