2016-12-02 42 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() 

返回数据帧仍有一些空值。我做错了吗?Spark - 具有多种条件的数据帧


电流输出

+--------+-----------+----------- 
|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

您没有在where子句中添加列EEEEE –

回答

1

它看起来像你的数据包含空白字符串不是NULLs。要筛选空白字符串,你可以使用rlike

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

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

trimlength

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

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

作为一个侧面说明,您可以使用DataFrameNaFunctions.drop与列的顺序丢弃含有NULL行:

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

or

df.na.drop() 

如果要删除包含行的所有NULL

+0

您是对的。它不是空的。尽管我从数据库中提取了空数据,但它包含黑色字符串,而不是空值。谢谢 :) –