Удаление NULL, NAN, пустое пространство из PySpark DataFrame

63
7

У меня есть dataframe в PySpark, который содержит пустое пространство, Null и Nan. Я хочу удалить строки, которые имеют какие-либо из них. Я попытался выполнить команды, но ничего не работает.

myDF.na.drop().show()
myDF.na.drop(how='any').show()

Ниже приведен фрагмент данных:

+---+----------+----------+-----+-----+
|age| category| date|empId| name|
+---+----------+----------+-----+-----+
| 25|electronic|17-01-2018| 101| abc|
| 24| sports|16-01-2018| 102| def|
| 23|electronic|17-01-2018| 103| hhh|
| 23|electronic|16-01-2018| 104| yyy|
| 29| men|12-01-2018| 105| ajay|
| 31| kids|17-01-2018| 106|vijay|
| | Men| nan| 107|Sumit|
+---+----------+----------+-----+-----+

Что мне не хватает? Каков наилучший способ решения проблемы с NULL, Nan или пустым пространством, чтобы в фактическом вычислении не возникало проблем?

спросил(а) 2021-01-25T18:25:43+03:00 4 месяца, 2 недели назад
1
Решение
88

NaN (а не число) имеет другое значение, что NULL и пустая строка являются просто нормальным значением (могут быть автоматически преобразованы в NULL с помощью csv reader), поэтому na.drop не будет соответствовать этим.

Вы можете преобразовать все в null и drop

from pyspark.sql.functions import col, isnan, when, trim

df = spark.createDataFrame([
("", 1, 2.0), ("foo", None, 3.0), ("bar", 1, float("NaN")),
("good", 42, 42.0)])

def to_null(c):
return when(~(col(c).isNull() | isnan(col(c)) | (trim(col(c)) == "")), col(c))

df.select([to_null(c).alias(c) for c in df.columns]).na.drop().show()
# +----+---+----+
# | _1| _2| _3|
# +----+---+----+
# |good| 42|42.0|
# +----+---+----+

ответил(а) 2021-01-25T18:25:43+03:00 4 месяца, 2 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема