pySpark groupby中的条件聚集

Mau*_*ile 0 pyspark-sql

来自pySpark的新手的一个简单问题:我有一个df,我想进行条件聚合,如果分母不同于0则返回聚合结果,否则返回0。

我的尝试产生一个错误:

groupBy=["K"]
exprs=[(sum("A")+(sum("B"))/sum("C") if sum("C")!=0 else 0 ]
grouped_df=new_df.groupby(*groupBy).agg(*exprs)
Run Code Online (Sandbox Code Playgroud)

有什么提示吗?

谢谢

MaF*_*aFF 6

您必须使用when/otherwiseif / else:

import pyspark.sql.functions as psf
new_df.groupby("K").agg(
    psf.when(psf.sum("C")==0, psf.lit(0)).otherwise((psf.sum("A") + psf.sum("B"))/psf.sum("C")).alias("sum")
)
Run Code Online (Sandbox Code Playgroud)

但是您也可以通过以下方式进行操作:

import pyspark.sql.functions as psf
new_df.groupby("K").agg(
    ((psf.sum("A") + psf.sum("B"))/psf.sum("C")).alias("sum")
).na.fill({"sum": 0})
Run Code Online (Sandbox Code Playgroud)