#scala #apache-spark #apache-spark-sql
Вопрос:
Я пытаюсь отфильтровать данные в фрейме данных, где один столбец равен нулю. Из исходного файла json я получаю значение для столбца, как показано ниже:
col:null
Схема для столбца отображается в виде строки.
Когда я фильтрую строку, я все еще получаю запись. Ни одна из приведенных ниже команд не работает. Не уверен, чего мне здесь не хватает.
df.filter($"col" =!= "null")
df.filter($"col" =!= lit("null"))
Выходные данные фрейма данных приведены ниже
---------- -------------------
|RecordCnt |col |
---------- -------------------
| 500000| null|
---------- -------------------
Ответ №1:
Вы не можете сравнивать с null с помощью операторов равенства. Вам необходимо использовать is not null
, например
val df2 = df.filter("col is not null")
или в API фреймов данных,
val df2 = df.filter($"col".isNotNull)
Комментарии:
1. я пробовал это раньше, и это не сработало!
2. это тоже не работает. Я попробовал использовать createOrReplaceTempView в фрейме данных и добавил, где col не равен нулю, что сработало. Не уверен, почему это не работает с помощью предложения фильтра!
3. О, вы назначили результат новому кадру данных? Нравится
val df2 = df.filter("col is not null")
Ответ №2:
//if you want to apply as where clause you can do it as .
val newDF = df.where(df("col").isNotNull)
OR
// if you want to filter as
val newDF = df.filter($"col".isNotNull)
OR
val newDF =df.filter("col is not null")