2017-03-28 36 views
1

我在Windows 10上運行的火花2.1,我從MySQL中取出數據使用JDBC火花和表看起來像這樣星火:子集數列和刪除空行

x  y  z 
------------------ 
1  a  d1 
Null v  ed 
5  Null Null 
7  s  Null 
Null bd  Null 

我想創建一個新的火花數據集只包含上表中的x and y columns,我不想僅保留那些在這兩列中都不爲空的行。我得到的表應該是這樣的

x  y 
-------- 
1  a 
7  s 

以下是代碼:

val load_DF = spark.read.format("jdbc").option("url", "jdbc:mysql://100.150.200.250:3306").option("dbtable", "schema.table_name").option("user", "uname1").option("password", "Pass1").load() 
val filter_DF = load_DF.select($"x".isNotNull,$"y".isNotNull).rdd 
// lets print first 5 values of filter_DF 
filter_DF.take(5) 
res0: Array[org.apache.spark.sql.Row] = Array([true,true], [false,true], [true,false], [true,true], [false,true]) 

如圖所示,上述結果並沒有給我的實際值,但是當值返回布爾值(真當值爲空時不爲空和假)

回答

1

試試這個;

val load_DF = spark.read.format("jdbc").option("url", "jdbc:mysql://100.150.200.250:3306").option("dbtable", "schema.table_name").option("user", "uname1").option("password", "Pass1").load() 

現在;

load_DF.select($"x",$"y").filter("x !== null").filter("y !== null") 
+0

感謝,它運行沒有任何錯誤,但沒有在輸出中沒有數據。它顯示一張空白表。我也嘗試過使用單個過濾器,例如'load_DF.select($「x」,$「y」)。filter(「x!= null」)'但沒有運氣。 – Nagesh

+0

嘗試load_DF.select($「x」,$「y」)。filter(「x!= null」) –

1

火花爲此下探空值的提供DataFrameNaFunctions

在你上面的例子,你只需要調用一個DataSet您加載

val noNullValues = load_DF.na.drop("all", Seq("x", "y")) 

這將以下在xy而不是z的字段中出現空位的情況下刪除記錄。您可以閱讀DataFrameNaFunctions以獲取填寫數據的更多選項,或者根據需要轉換值。

+0

根據你的回答,這對我有用'val filter_DF = load_DF.select($「x」,$ 「y」)。na.drop()。rdd' – Nagesh

+1

檢查我更新的答案,它指定只顯式刪除'x和y'。我原來的回答會丟失記錄,其中'z == null'這不是你要求的 – Brad

0

你只是應用功能(在這種情況下isNotNull)的值,當你做一個select - 而不是你需要filter更換select

val filter_DF = load_DF.filter($"x".isNotNull && $"y".isNotNull) 

或者如果你喜歡:

val filter_DF = load_DF.filter($"x".isNotNull).filter($"y".isNotNull)