Spark 2将scala数组转换为WrappedArray

时间:2020-10-05 09:43:31

标签: scala apache-spark

当我将数组传递给函数时,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的数据类型?

1 个答案:

答案 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在做什么。我无法验证。

相关问题