将列添加到现有的MapType列

时间:2019-07-11 13:58:18

标签: apache-spark pyspark

我有一个包含几列的数据框。其中之一是地图(MapType)。 该地图列内的键因行而异。这意味着可能会发生以下情况:

+----------+-----------------+
|     col_1|            col_2|
+----------+-----------------+
|         7| key_1 -> value_1|
|         5| key_2 -> value_2|
|         4| key_3 -> value_3|
+----------+-----------------+

我想做的是将第一列添加到此地图列中,以得到类似的内容:

+----------+-----------------------------+
|     col_1|                        col_2|
+----------+-----------------------------+
|         7| key_1 -> value_1, col_1 -> 7|
|         5| key_2 -> value_2, col_1 -> 5|
|         4| key_3 -> value_3, col_1 -> 4|
+----------+-----------------------------+

但是我不知道如何在保留地图列中的各个键的同时向地图添加第一列。

1 个答案:

答案 0 :(得分:0)

在版本 2.4.0 中,您可以使用许多新功能来操作地图类型。

假设df是您的数据框:

from pyspark.sql import functions as F

df.withColumn(
    "col_2",
    F.map_concat(
        F.col("col_2"),
        F.map_from_entries(F.array(F.struct(F.col("col_1"))))
    )
)