2016-08-30 105 views
1

我使用星火1.4.0,這是我到目前爲止有:過濾火花/斯卡拉據幀,如果列存在於集

data.filter($"myColumn".in(lit("A"), lit("B"), lit("C"), ...)) 

功能lit轉換文字到列。

理想的情況下,我就放不下A,B,C的設定和確認這樣的:

val validValues = Set("A", "B", "C", ...) 
data.filter($"myColumn".in(validValues)) 

什麼是正確的語法?是否有任何替代方案簡潔?

回答

4

火花1.4或以上:

val validValues = Set("A", "B", "C").map(lit(_)) 
data.filter($"myColumn".in(validValues.toSeq: _*)) 

火花1.5或更新:

val validValues = Set("A", "B", "C") 
data.filter($"myColumn".isin(validValues.toSeq: _*)) 
+0

錯誤:類型不匹配;發現:序號[字符串]要求:序號[org.apache.spark.sql.Column] – Gevorg

+0

也,你能請向我解釋說:「:_ *」(我是新來的...) – Gevorg

+0

我已經更新了我答案,因爲它只有在星火的較新版本的工作。由於'in'方法接受'欄*'作爲其輸入,我們必須使用'「:_ *」'語法規則的集合('序列[專欄]'在這種情況下)轉換成集合的可變參數版本( '欄*') –