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.sql 查询转换为 spark/scala 查询