gpt4 book ai didi

apache-spark - 用字典键值(pyspark)替换spark df中一列的值

转载 作者:行者123 更新时间:2023-12-03 15:22:15 24 4
gpt4 key购买 nike

我陷入了pyspark中的数据转换任务。
我想用字典中指定的键值对替换df中一列的所有值。

dict = {'A':1, 'B':2, 'C':3}

我的df看起来像这样:
+-----------++-----------+
| col1|| col2|
+-----------++-----------+
| B|| A|
| A|| A|
| A|| A|
| C|| B|
| A|| A|
+-----------++-----------+

现在,我要用dict中定义的键值对替换col1的所有值。

所需的输出:
+-----------++-----------+
| col1|| col2|
+-----------++-----------+
| 2|| A|
| 1|| A|
| 1|| A|
| 3|| B|
| 1|| A|
+-----------++-----------+

我试过了
df.na.replace(dict, 1).show()

但这也替换了col2上的值,该值将保持不变。

感谢您的帮助。
问候 :)

最佳答案

您的数据:

print df
DataFrame[col1: string, col2: string]
df.show()
+----+----+
|col1|col2|
+----+----+
| B| A|
| A| A|
| A| A|
| C| B|
| A| A|
+----+----+

diz = {"A":1, "B":2, "C":3}

将字典的值从整数转换为字符串,以免出现替换不同类型的错误:
diz = {k:str(v) for k,v in zip(diz.keys(),diz.values())}

print diz
{'A': '1', 'C': '3', 'B': '2'}

替换col1的值
df2 = df.na.replace(diz,1,"col1")
print df2
DataFrame[col1: string, col2: string]

df2.show()
+----+----+
|col1|col2|
+----+----+
| 2| A|
| 1| A|
| 1| A|
| 3| B|
| 1| A|
+----+----+

如果您需要将值从String强制转换为Integer
from pyspark.sql.types import *

df3 = df2.select(df2["col1"].cast(IntegerType()),df2["col2"])
print df3
DataFrame[col1: int, col2: string]

df3.show()
+----+----+
|col1|col2|
+----+----+
| 2| A|
| 1| A|
| 1| A|
| 3| B|
| 1| A|
+----+----+

关于apache-spark - 用字典键值(pyspark)替换spark df中一列的值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44776283/

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