当我将数组传递给函数时,Spark 2正在将scala数组自动转换为WrappedArray。但是,在Spark 1.6中,数组将转换为类似'[a,b,c]'的字符串。这是我的代码
val df_date_agg = df
.groupBy($"a",$"b",$"c")
.agg(sum($"d").alias("data1"),sum($"e").alias("data2"))
.groupBy($"a")
.agg(collect_list(array($"b",$"c",$"data1")).alias("final_data1"),
collect_list(array($"b",$"c",$"data2")).alias("final_data2"))
当我在上述代码上运行以触发1.6时。我正在了解架构
|-- final_data1: array (nullable = true)
| |-- element: string (containsNull = true)
|-- final_data2: array (nullable = true)
| |-- element: string (containsNull = true)
但火花2
|-- final_data1: array (nullable = true)
| |-- element: array (containsNull = true)
| | |-- element: string (containsNull = true)
|-- final_data1: array (nullable = true)
| |-- element: array (containsNull = true)
| | |-- element: string (containsNull = true)
如何根据火花1更改火花2的数据类型?
答案 0 :(得分:0)
既然您想要数组的字符串表示形式,如何将数组转换成这样的字符串?
val df_date_agg = df
.groupBy($"a",$"b",$"c")
.agg(sum($"d").alias("data1"),sum($"e").alias("data2"))
.groupBy($"a")
.agg(collect_list(array($"b",$"c",$"data1") cast "string").alias("final_data1"),
collect_list(array($"b",$"c",$"data2") cast "string").alias("final_data2"))
这可能只是您旧版本的spark在做什么。我无法验证。