Как очистить rdd или DataFrame с помощью PySpark (удалить нули и дубликаты) - PullRequest
0 голосов
/ 18 сентября 2018

Я новичок в 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 голосов
/ 18 сентября 2018

Похоже, у вас есть rdd, а не DataFrame.Вы можете легко преобразовать rdd в фрейм данных , а затем использовать pyspark.sql.DataFrame.dropna() и pyspark.sql.DataFrame.dropDuplicates(), чтобы "очистить" его.

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

Обе эти функции принимают и необязательный параметр subset, который можно использовать для указания подмножества столбцов для поиска null s и дубликатов.


Если вы хотите "очистите ваши данные как rdd, вы можете использовать filter() и distinct() следующим образом:

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