Spark 2 将 scala 数组转换为 WrappedArray

Posted

技术标签:

【中文标题】Spark 2 将 scala 数组转换为 WrappedArray【英文标题】:Spark 2 converting scala array to WrappedArray 【发布时间】:2020-10-05 09:43:31 【问题描述】:

当我将数组传递给函数时,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)

如何根据 spark 1 更改 spark 2 的数据类型?

【问题讨论】:

我相信你已经发布了两次相同的问题***.com/questions/64204751/… 【参考方案1】:

既然你想要一个数组的字符串表示,那么将数组转换成这样的字符串怎么样?

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 正在做的事情。我无法验证。

【讨论】:

以上是关于Spark 2 将 scala 数组转换为 WrappedArray的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Spark 2 Scala 中将 Row 转换为 json

如何在 Spark Scala 中将 WrappedArray 转换为 List?

Spark Scala:将任意 N 列转换为 Map

将 spark.sql 查询转换为 spark/scala 查询

将 Spark Dataframe 转换为 Scala Map 集合

将数据转换为 spark scala 中的类对象列表