2017-02-14 39 views
2

我想爲Spark SQL DataFrame編寫一個多值過濾器。在Spark-SQL中需要一個TRUE和FALSE列

我:

val df: DataFrame  // my data 
val field: String  // The field of interest 
val values: Array[Any] // The allowed possible values 

,我想拿出過濾器規範。

目前,我有:

val filter = values.map(value => df(field) === value)).reduce(_ || _) 

但是,這並不強大的在我獲得通過一個空白值列表的情況。爲了彌補這種情況下,我想:

val filter = values.map(value => df(field) === value)).fold(falseColumn)(_ || _) 

,但我不知道如何指定falseColumn。

任何人都知道該怎麼做?

有沒有更好的方式來寫這個過濾器? (如果是這樣,我仍然需要如何獲得falseColumn的答案 - 我需要一個trueColumn爲一個單獨的部分)。

回答

1

一列始終是真實的:

val trueColumn = lit(true) 

A柱,始終是假的:

val falseColumn = lit(false) 

使用lit(...)意味着這些將永遠是有效列,無論數據幀中包含哪些列。

相關問題