【问题标题】:How to clean rdd or DataFrame with PySpark (drop nulls and duplicates)如何使用 PySpark 清理 rdd 或 DataFrame(删除空值和重复值)
【发布时间】:2018-09-17 21:15:23
【问题描述】:

我是 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。请尝试print(type(rw_data3)) 确定。

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


【解决方案1】:

看起来你有一个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 和重复项。


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

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

【讨论】:

  • 谢谢,你是对的。它们是 RDD。我也可以清理 RDD 吗?还是只有数据帧,然后我必须将它们转换回 RDD?再次感谢!
  • @lauvdb 更新了rdds 的答案。您可以在rdd 上进行操作,但DataFrame 是is generally preferred,具体取决于what you're trying to do
猜你喜欢
  • 2022-01-13
  • 1970-01-01
  • 2017-05-14
  • 1970-01-01
  • 2018-12-21
  • 1970-01-01
  • 2022-11-02
  • 1970-01-01
  • 2019-08-11
相关资源
最近更新 更多