如何在spark中同时拆分数据帧中的两个映射列

时间:2021-06-02 13:47:51

标签: scala dataframe apache-spark apache-spark-sql

我有一个这种形式的数据框

+--------------------------------------+-----------------------------+
|hashMap                               |name                         |
+--------------------------------------+-----------------------------+
|[{"A":"0","B":"0","C":"0"}, {"X":"0"}]|[M, D]                       |
+--------------------------------------+-----------------------------+

我想拆分成这个

+--------------------------------------+-----------------------------+
|hashMap                               |name                         |
+--------------------------------------+-----------------------------+
|"A":"0","B":"0","C":"0"               | M                           |
|"X":"0"                               | D                           |
+--------------------------------------+-----------------------------+

我知道爆炸拆分,但我不知道它是否适用于两列。 此外,有时两列中可能只有一个值

例如

+-----------+-----------+
|hashMap    |name       |
+-----------+-----------+
|[{"A":"0"} |[M]        |
+-----------+-----------+

如何使爆炸拆分通用以在 Scala 中处理此问题?

1 个答案:

答案 0 :(得分:2)

您可以使用 inline 压缩数组并分解它们:

val df2 = df.selectExpr("inline(arrays_zip(hashMap, name))")