apache-spark-sql - pySpark groupby 中的条件聚合

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)

有什么提示吗?

谢谢

最佳答案

对于 if/else,您必须使用 when/otherwise:

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")
)

但是你也可以这样做:

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})

https://stackoverflow.com/questions/46304779/

相关文章:

julia - 如何更改 Julia 中的最大递归深度?

oauth - 我如何测试是否已获得管理员同意

python-2.7 - 如何删除回复键盘( Telegram Bot )

regex - RegExp 字符类中的范围乱序

css - 通过添加元素 React.js 的数量来更改 div 元素的高度

c# - 可访问性不一致 : field type is less accessible than

bash - 在 MAC OSX 中比较 Bash 中的两个日期

php - Laravel - 使用 Query Builder 函数传递变量

python-3.x - Python KafkaConsumer 从时间戳开始消费消息

apache-kafka - Zookeeper 安装在 Windows 10 上不起作用