通常,组中的所有行都被传递给聚合函数。我想使用一个条件来过滤行,以便只有组中的某些行被传递给一个聚合函数。这种操作可能与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和聚合。 –
这适用于这种特殊情况,但如果在具有不同过滤条件的同一列上有多个聚合,它将不起作用。 –