如何使用PySpark清理rdd或DataFrame(删除null和重复项)

时间:2018-09-17 21:15:23

标签: python apache-spark pyspark apache-spark-sql rdd

我是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的语法

1 个答案:

答案 0 :(得分: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,您可以使用它们指定列的子集来搜索null和重复项。


如果您想以rdd“清理”数据,则可以如下使用filter()distinct()

clean_rdd = rw_data2.filter(lambda row: all(x is not None for x in row)).distinct()