2016-08-30 7 views
1

に存在する場合、これは私がこれまで持っているものです。フィルタースパーク/ Scalaのデータフレームの列は、私はスパーク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

エラー:型の不一致。見つかった:Seq [String] required:Seq [org.apache.spark.sql.Column] – Gevorg

+0

また、「:_ *」(私はここに新しい...) – Gevorg

+0

それはSparkの新しいバージョンでのみ機能していたからです。 'in'メソッドは' Column * 'を入力として受け入れるので、普通のコレクション(この場合は' Seq [Column] ')をそのコレクションのvarargsバージョンに変換するために' ":_ *" ' '列*') –

関連する問題