如何使用PySpark清理rdd或DataFrame(drop nulls和duplicates)

问题描述 投票:0回答:1

我是Python / PySpark的新手,在使用Mac终端之前我无法清理数据。我想删除包含空值或重复行的任何行。我使用.distinct()并尝试:

rw_data3 = rw_data.filter(rw_data.isNotNull())

我也试过......

from functools import reduce
rw_data.filter(~reduce(lambda x, y: x & y, [rw_data[c].isNull() for c in 
rw_data.columns])).show()

但我明白了

"AttributeError: 'RDD' object has no attribute 'isNotNull'"

要么

"AttributeError: 'RDD' object has no attribute 'columns'"

这清楚地表明我并不真正理解清理DataFrame的语法

python apache-spark pyspark apache-spark-sql rdd
1个回答
0
投票

看起来你有一个rdd,而不是DataFrame。你可以很容易地convert the rdd to a DataFrame,然后使用pyspark.sql.DataFrame.dropna()pyspark.sql.DataFrame.dropDuplicates()来“清理”它。

clean_df = rw_data3.toDF().dropna().dropDuplicates()

这两个函数都接受和可选参数subset,您可以使用它来指定列的子集以搜索nulls和duplicates。


如果您想将数据“清理”为rdd,可以使用filter()distinct(),如下所示:

clean_rdd = rw_data2.filter(lambda row: all(x is not None for x in row)).distinct()
© www.soinside.com 2019 - 2024. All rights reserved.