通常,組中的所有行都被傳遞給聚合函數。我想使用一個條件來過濾行,以便只有組中的某些行被傳遞給一個聚合函數。這種操作可能與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|
是否有可能與Spark SQL?
請注意,通常可以使用除max
以外的任何其他聚合函數,並且可以在具有任意過濾條件的同一列上使用多個聚合。
我'首先用null或NaN替換超出限制的所有值,然後我將groupBy和聚合。 –
這適用於這種特殊情況,但如果在具有不同過濾條件的同一列上有多個聚合,它將不起作用。 –