фильтровать данные из фрейма данных

#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")