我使用Spark 2.0.1 Scala 2.11
如何使用coalesce
为StructType
的列提供默认值?
说......
val ss = new StructType().add("x", IntegerType).add("y", IntegerType)
val s = new StructType()
.add("a", IntegerType)
.add("b", ss)
val d = Seq( Row(1, Row(1,2)), Row(2, Row(2,3)), Row(2, null) )
val rd = sc.parallelize(d)
val df = spark.createDataFrame(rd, s)
现在,df.select($"b").show
会产生
+-----+
| b |
+-----+
|[1,2]|
|[2,3]|
| null|
+-----+
我的问题是如何使用[0,0]
提供默认值(例如coalesce
)?
答案 0 :(得分:3)
您可以使用struct
函数,传递两个lit(0)
值,以匹配您已有的结构的名称:
df.select(coalesce($"b", struct(lit(0).as("x"), lit(0).as("y"))))
.show()
// +---------------------------------------+
// |coalesce(b, struct(0 AS `x`, 0 AS `y`))|
// +---------------------------------------+
// | [1,2]|
// | [2,3]|
// | [0,0]|
// +---------------------------------------+