Scala 聚结的火花结构类型

Scala 聚结的火花结构类型,scala,apache-spark,dataframe,struct,coalesce,Scala,Apache Spark,Dataframe,Struct,Coalesce,我使用Spark 2.0.1 Scala 2.11 如何使用合并为结构类型为的列提供默认值 说 val ss=new StructType().add(“x”,IntegerType).add(“y”,IntegerType) val s=新结构类型() .添加(“a”,整数类型) .加入(“b”,ss) val d=序号(第(1行,第(1,2)行),第(2,第(2,3)行),第(2,null)行) val rd=sc.parallelize(d) val df=spark.createData

我使用Spark 2.0.1 Scala 2.11

如何使用
合并
为结构类型为
的列提供默认值

val ss=new StructType().add(“x”,IntegerType).add(“y”,IntegerType)
val s=新结构类型()
.添加(“a”,整数类型)
.加入(“b”,ss)
val d=序号(第(1行,第(1,2)行),第(2,第(2,3)行),第(2,null)行)
val rd=sc.parallelize(d)
val df=spark.createDataFrame(rd,s)
现在,
df.选择($“b”)。在

+-----+
|b|
+-----+
|[1,2]|
|[2,3]|
|空的|
+-----+

我的问题是如何使用
coalesce
提供默认值(例如
[0,0]
)?

您可以使用
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]|
// +---------------------------------------+

expr
中使用时如何转义
”?例如
df.groupBy($“a”).pivot(“a”).agg(expr(“first(coalesce(b,struct(lit(0.as)(“x”)lit(0.as(““y”))))show
不起作用这是个好问题……我找不到这样做的方法,因为
“first”(coalesce(b,struct(0作为x,0作为y)))“
本应执行此操作,但无法解析;但是您始终可以执行
df.groupBy($“a”).pivot(“a”).agg(首先(合并($“b”,结构(lit(0).as(“x”),lit(0).as(“y”))))))。show
看起来SQL表达式需要完全不同的语法
df.groupBy($“a”).pivot($“a”).agg(expr(“first(coalesce(b,named_struct('x',0',y',0))))))))))。show
似乎起作用当我键入评论并看到您的回复时,我的页面刚刚刷新。谢谢