2017-06-02 133 views
1

我想計數數據幀在列空值是這樣的:計數空值火花(斯卡拉)

df.filter((df(colname) === null) || (df(colname) === "")).count() 

在colname的有列的名稱。如果列類型是字符串,但是如果列類型是整數並且存在一些空值,此代碼始終返回0,此工作正常。爲什麼這樣呢?如何改變它使其工作?

+0

在這個線程你找到更廣泛的答案。只需添加.count()。 https://stackoverflow.com/questions/39727742/how-to-filter-out-a-null-value-from-spark-dataframe –

回答

1

關於這一問題提到df.filter((df(colname) === null) || (df(colname) === "")).count()作品String數據類型,但測試表明,null不處理。

@ Psidom的回答同時處理nullempty手柄NaN

.isNaN檢查應該處理所有三種情況下

df.filter(df(colName).isNull || df(colName) === "" || df(colName).isNaN).count() 
1

您可以使用isNull測試null條件:

val df = Seq((Some("a"), Some(1)), (null, null), (Some(""), Some(2))).toDF("A", "B") 
// df: org.apache.spark.sql.DataFrame = [A: string, B: int] 

df.filter(df("A").isNull || df("A") === "").count 
// res7: Long = 2 

df.filter(df("B").isNull || df("B") === "").count 
// res8: Long = 1