我是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的语法
看起来你有一个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
s和duplicates。
如果您想将数据“清理”为rdd
,可以使用filter()
和distinct()
,如下所示:
clean_rdd = rw_data2.filter(lambda row: all(x is not None for x in row)).distinct()