Различия между null и NaN в spark? Как с этим бороться?

в моем фрейме данных есть столбцы, включающие значения null и NaN соответственно, такие как:

df = spark.createDataFrame([(1, float('nan')), (None, 1.0)], ("a", "b"))
df.show()

+----+---+
|   a|  b|
+----+---+
|   1|NaN|
|null|1.0|
+----+---+

есть ли разница между ними? Как с ними справиться?

2 ответов


null values представляет собой "нет значения" или "ничего", это даже не пустая строка или ноль. Его можно использовать, чтобы показать, что ничего полезного не существует.

NaN означает "не число", это обычно результат математической операции, которая не имеет смысла, например 0.0/0.0.

один из возможных способов обработки null значения, чтобы удалить их с:

df.na.drop()

или вы можете изменить их на фактическое значение (здесь я использовал 0) с:

df.na.fill(0)

другим способом было бы выбрать строки, где конкретный столбец null для дальнейшей обработки:

df.where(col("a").isNull())
df.where(col("a").isNotNull())

строки с NaN также могут быть выбраны с помощью эквивалентного метода:

from pyspark.sql.functions import isnan
df.where(isnan(col("a")))

вы можете различать значения NaN с помощью функции isnan, как в этом примере

>>> df = spark.createDataFrame([(1.0, float('nan')), (float('nan'), 2.0)], ("a", "b"))
>>> df.select(isnan("a").alias("r1"), isnan(df.a).alias("r2")).collect()
[Row(r1=False, r2=False), Row(r1=True, r2=True)]

разница в тип объекта, который generetes значение. NaN (not a number)- это старомодный способ справиться с "значением None для числа", вы можете думать, что у вас есть все числа (- 1-2...0,1,2...) и есть необходимость иметь и дополнительное значение, для случаев ошибок (например, 1/0), я хочу, чтобы 1/0 дал мне число, но какое число? ну, как будто есть номер для 1/0, они создают новое значение под названием NaN, которое также имеет тип Number.

None используется для пустоты, отсутствия элемента, еще более абстрактно, потому что внутри типа number у вас есть, кроме значения de NaN, значение None. Значение None присутствует во всех наборах значений всех типов