如何在pysp中按列名映射值

2024-10-03 21:26:42 发布

您现在位置:Python中文网/ 问答频道 /正文

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

#+-------+----------+
#|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

但是如何在Pypark写。 我可以使用createtentable,但我认为这不是最好的解决方案/


Tags: keyfromkeysselectxxxvalueskey2key1
2条回答

使用^{}函数创建映射列,然后将其分解。你知道吗

create_map需要分组的列表达式列表 作为键值对。可以使用创建这样的列表,以便理解数据帧列:

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|
+  +   +

像这样的?你知道吗

select 'key1' as keys,
       key1 as values
from xxx
union all 
select 'key2' as keys,
       key2 as values
from xxx

那就是spark.sql()。你知道吗

相关问题 更多 >