gpt4 book ai didi

python - 如何在 pyspark 中按列名称映射值

转载 作者:行者123 更新时间:2023-11-30 21:53:53 24 4
gpt4 key购买 nike

我想要什么 - 是将列名映射到键中。例如:

#+-------+----------+
#|key1 |key2 |
#+-------+----------+
#|value1 |value2 |
#|value3 |value4 |
#+-------+----------+

将转换为

#+-------+----------+
#| keys|values |
#+-------+----------+
#|key1 |value1 |
#|key1 |value2 |
#|key2 |value3 |
#|key2 |value4 |
#+-------+----------+

在 HiveQL 中我可以写类似的东西

select distinct key, velue
from xxx
lateral view explode(map(
'key1', key1,
'key2', key2) tab as key, value

但是如何在 pyspark 中编写它。我可以使用 createtemptable 但我认为这不是最好的解决方案/

最佳答案

使用create_map函数创建一个 Map 列,然后将其分解。

create_map 需要分组的列表达式列表作为键值对。可以使用 DataFrame 列的理解来创建这样的列表:

from itertools import chain
from pyspark.sql.functions import col, lit, create_map, explode


data = [("value1", "value2"), ("value3", "value4")]
df = spark.createDataFrame(data, ["key1", "key2"])

key_values = create_map(*(chain(*[(lit(name), col(name)) for name in df.columns])))

df.select(explode(key_values)).show()

+----+------+
| key| value|
+----+------+
|key1|value1|
|key2|value2|
|key1|value3|
|key2|value4|
+----+------+

关于python - 如何在 pyspark 中按列名称映射值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59490491/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com