spark 2将scala阵列转换为wrappedarray

iezvtpos  于 2021-05-24  发布在  Spark
关注(0)|答案(1)|浏览(768)

spark2正在将scala数组自动转换为wrappedarray,当我将数组传递给函数时。但是,在spark 1.6中,数组被转换为类似于“[a,b,c]”的字符串。这是我的密码

  1. val df_date_agg = df
  2. .groupBy($"a",$"b",$"c")
  3. .agg(sum($"d").alias("data1"),sum($"e").alias("data2"))
  4. .groupBy($"a")
  5. .agg(collect_list(array($"b",$"c",$"data1")).alias("final_data1"),
  6. collect_list(array($"b",$"c",$"data2")).alias("final_data2"))

当我运行上面的代码来激发1.6。我的能力越来越弱了

  1. |-- final_data1: array (nullable = true)
  2. | |-- element: string (containsNull = true)
  3. |-- final_data2: array (nullable = true)
  4. | |-- element: string (containsNull = true)

但在spark 2中

  1. |-- final_data1: array (nullable = true)
  2. | |-- element: array (containsNull = true)
  3. | | |-- element: string (containsNull = true)
  4. |-- final_data1: array (nullable = true)
  5. | |-- element: array (containsNull = true)
  6. | | |-- element: string (containsNull = true)

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

xriantvc

xriantvc1#

既然您需要数组的字符串表示,那么将数组转换成这样的字符串如何?

  1. val df_date_agg = df
  2. .groupBy($"a",$"b",$"c")
  3. .agg(sum($"d").alias("data1"),sum($"e").alias("data2"))
  4. .groupBy($"a")
  5. .agg(collect_list(array($"b",$"c",$"data1") cast "string").alias("final_data1"),
  6. collect_list(array($"b",$"c",$"data2") cast "string").alias("final_data2"))

它可能只是你的旧版本的Spark在做什么。我无法证实。

相关问题