gpt4 book ai didi

python - PySpark:TypeError: 'Row' 对象不支持项目分配

转载 作者:太空狗 更新时间:2023-10-30 00:05:55 24 4
gpt4 key购买 nike

我使用以下代码将 DataFrame 行中的 None 值替换为空字符串:

def replaceNone(row):
row_len = len(row)
for i in range(0, row_len):
if row[i] is None:
row[i] = ""
return row

在我的 pyspark 代码中:

data_out = df.rdd.map(lambda row : replaceNone(row)).map(
lambda row : "\t".join( [x.encode("utf-8") if isinstance(x, basestring) else str(x).encode("utf-8") for x in row])
)

然后我得到了以下错误:

File "<ipython-input-10-8e5d8b2c3a7f>", line 1, in <lambda>
File "<ipython-input-2-d1153a537442>", line 6, in replaceNone
TypeError: 'Row' object does not support item assignment

有人知道这个错误吗?如何将一行中的“无”值替换为空字符串?谢谢!

最佳答案

Rowtuple 的子类,Python 中的 tuple 是不可变的,因此不支持项目分配。如果你想替换存储在元组中的项目,你必须从头开始重建它:

## replace "" with placeholder of your choice 
tuple(x if x is not None else "" for x in row)

如果你想简单地连接用空字符串替换 null 的平面模式,你可以使用 concat_ws:

from pyspark.sql.functions import concat_ws

df.select(concat_ws("\t", *df.columns)).rdd.flatMap(lambda x: x)

要准备输出,使用 spark-csv 并指定 nullValuedelimiterquoteMode 更有意义.

关于python - PySpark:TypeError: 'Row' 对象不支持项目分配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37713847/

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