2016-12-02 43 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

您是對的。它不是空的。儘管我從數據庫中提取了空數據,但它包含黑色字符串,而不是空值。謝謝 :) –