2016-04-27 22 views
9

Scala APIの複数のカラムでフィルタリングするためのcorrent構文は何ですか?私はこのような何かをしたい場合:スパークSQLフィルタ複数のフィールド

dataFrame.filter($"col01" === "something" && $"col02" === "something else") 

または

dataFrame.filter($"col01" === "something" || $"col02" === "something else") 

EDIT:

これは私の元のコードは次のようになります。すべてが文字列として入力されます。

df.select($"userID" as "user", $"itemID" as "item", $"quantity" cast("int"), $"price" cast("float"), $"discount" cast ("float"), sqlf.substring($"datetime", 0, 10) as "date", $"group") 
    .filter($"item" !== "" && $"group" !== "-1") 
+0

見た目はOKです。何か問題がありますか? – zero323

+1

それが動作しない場合、 'import sqlContext.implicits._'が不足している可能性があります。' sqlContext'は 'SQLContext'または' HiveContext'のインスタンスです。 –

+0

"value &&はStringのメンバーではありません"となっていました。解決策は、各ステートメントをかっこで囲むことです。 – gstvolvr

答えて

14

私は問題が何であるかを見ていると思います。なんらかの理由で、スパークは2つの!=を同じには許さない。フィルタ。どのように見てくださいフィルタは、スパークソースコードで定義されています。異なるスパーク方法で助けることができる

今、あなたのコードが動作するために、あなたはフィルタ

df.filter(col("item").notEqual("") && col("group").notEqual("-1")) 

またはこのリンクhere同じ文で

df.filter($"item" !== "").filter($"group" !== "-1").select(....) 

を2つのフィルタを使用を行うためにこれを使用することができます。

+0

こんにちは@dheee?両方のオプションが同じ動作をするかどうか知っていますか? – servatj

+1

@servatj私は私の最後にパフォーマンスの違いを見ていない。 – dheee

+0

!class Columnの==は廃止され、!==は===と同じ優先順位を持ちません。ですから、私は=!=を代わりに使用するように調整しました。 –

関連する問題