通常、グループ内のすべての行は集約関数に渡されます。私は条件を使用して行をフィルタリングして、グループ内のいくつかの行だけが集合関数に渡されるようにしたいと思います。このような操作はPostgreSQLで可能です。 Spark SQL DataFrame(Spark 2.0.0)でも同じことをしたいと思います。spark sqlを使用して特定の集計の行をフィルタリングする方法は?
コードは、おそらく次のようになります。
val df = ... // some data frame
df.groupBy("A").agg(
max("B").where("B").less(10), // there is no such method as `where` :(
max("C").where("C").less(5)
)
そのため、このようなデータフレームのために:
| A | B | C |
| 1| 14| 4|
| 1| 9| 3|
| 2| 5| 6|
結果は次のようになります。
|A|max(B)|max(C)|
|1| 9| 4|
|2| 5| null|
持つことが可能ですスパークSQL?
一般に、max
以外の集計関数を使用することができ、任意のフィルタリング条件を使用して同じ列に複数の集計が存在する可能性があることに注意してください。
I '最初に、あなたの限界を超えるすべての値をnullまたはNaNで置き換えると、私はgroupByとaggregateを行います。 –
これはこの特定のケースでは機能しますが、異なるフィルタリング条件で同じ列に複数の集約がある場合は機能しません。 –