Eda*_*ame 6 python apache-spark-sql pyspark
我使用以下代码将NoneDataFrame行中的值替换为空字符串:
def replaceNone(row):
row_len = len(row)
for i in range(0, row_len):
if row[i] is None:
row[i] = ""
return row
Run Code Online (Sandbox Code Playgroud)
在我的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])
)
Run Code Online (Sandbox Code Playgroud)
然后我收到以下错误:
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
Run Code Online (Sandbox Code Playgroud)
有没有人对错误有任何想法?如何将行中的"无"值替换为空字符串?谢谢!
Row是 的子类tuple,tuples在 Python 中是不可变的,因此不支持项目分配。如果你想替换存储在元组中的项目,你必须从头开始重建它:
## replace "" with placeholder of your choice
tuple(x if x is not None else "" for x in row)
Run Code Online (Sandbox Code Playgroud)
如果您想简单地连接平面模式,用空字符串替换 null,您可以使用concat_ws:
from pyspark.sql.functions import concat_ws
df.select(concat_ws("\t", *df.columns)).rdd.flatMap(lambda x: x)
Run Code Online (Sandbox Code Playgroud)
spark-csv要准备输出,使用和指定nullValue,delimiter和更有意义quoteMode。
| 归档时间: |
|
| 查看次数: |
8683 次 |
| 最近记录: |