2016-12-02 6 views
0
var rtn = df.select(
       col(colmap.get("AAAAA")) as "AAAAA", 
       lit(colmap.get("BBBBB")) as "BBBBB", 
       col(colmap.get("CCCCC")) as "CCCCC", 
       col(colmap.get("DDDDD")) as "DDDDD" 
      ) 
      .where(col("AAAAA").isNotNull && col("BBBBB").isNotNull && col("CCCCC").isNotNull && col("DDDDD").isNotNull) 

      rtn.show() 

Возврат dataframe все еще имеет несколько значений нуля. Я делаю неправильно?Spark - Dataframe с несколькими состояниями


Выходной ток

+--------+-----------+----------- 
|AAAAA|BBBBB|CCCCC|DDDDD|EEEEE| 
+--------+-----------+----------- 
|A11111|B12345|C1111|D11111|  | 
|A22222|B12345|C2222|D22222|  | 
|A33333|B12345|C3333|D33333|E11111| 
|A44444|B12345|C4444|D44444|  | 
|A55555|B12345|C5555|D55555|E11111| 

Мой ожидается выход

+--------+-----------+----------- 
|AAAAA|BBBBB|CCCCC|DDDDD|EEEEE| 
+--------+-----------+----------- 
|A11111|B12345|C1111|D11111|E11111| 
|A22222|B12345|C2222|D22222|E11111| 
|A33333|B12345|C3333|D33333|E11111| 
|A44444|B12345|C4444|D44444|E11111| 
|A55555|B12345|C5555|D55555|E11111| 

Существует еще некоторое нулевое значение столбца EEEEE. DataFrame, где условие, похоже, не работает должным образом.

+1

Не могли бы вы уточнить, что вы делаете, вместо того, чтобы сбрасывать код? Также укажите примерные данные и ожидаемый результат. – mtoto

+0

Вы не добавили столбец EEEEE в поле where –

ответ

1

Похоже, что ваши данные содержат пустые строки не NULLs. Чтобы отфильтровать пустые строки, вы можете использовать rlike:

import org.apache.spark.sql.functions.not 

not($"foo".rlike("^\\s*$"))) // or !$"foo".rlike("^\\s*$") 

или trim и length:

import org.apache.spark.sql.functions.{trim, length} 

length(trim($"foo")) =!= 0 

В качестве примечания можно использовать DataFrameNaFunctions.drop с последовательностью столбцов уронить строки, содержащие NULL:

df.na.drop(Seq("foo", "bar")) 

или

df.na.drop() 

Если вы хотите удалить все NULL, содержащие строки.

+0

Вы правы. Это не было ошибкой. Несмотря на то, что я привел нулевые данные из БД, его содержать как черную строку, а не null. благодаря :) –

Смежные вопросы