2016-06-20 3 views
2

私はSparkアプリケーションを使用しています(Scalaを使用しています)、複数の値を含むListを持っています。私はこのリストを使用してDataFrameにwhere句を書き、タプル上のサブセットのみを選択したいと考えています。たとえば、私のリストには 'value1'、 'value2'、および 'value3'が含まれています。SparkでDataFrameの複数の値に基づいて条件を書き込む方法

mydf.where($"col1" === "value1" || $"col1" === "value2" || $"col1" === "value3) 

リストには多くの値が含まれているため、これをプログラムで実行するにはどうすればよいですか?

+0

だけFYI $ col1は同時に3つの値をとることができないので、あなたが与えている例はNULLを返しますか? – Psidom

+0

申し訳ありませんが私は間違いを犯しました。 &&もありません。 –

答えて

4

あなたは(タイプColumn付き)「フィルタ」のリストに値のリストをマップし、すべての二つのフィルタに||演算子を適用することにより、単一のフィルタには、このリストを減らすことができます。

val possibleValues = Seq("value1", "value2", "value3") 
val result = mydf.where(possibleValues.map($"col1" === _).reduce(_ || _)) 
+0

これを実行すると、where関数の内部部分(possibleValues.map($ "col1" === _)。reduce(_ || _))は次のようになります。 ((((col1 = value1) ||(col2 = value2)) 先頭に余分な括弧があるのはなぜですか? –

関連する問題