apache-spark - 当 .agg.count() 中没有行时显示 0
问题描述
我有一些像这样汇总的数据:
count = (
t1
.where(sf.col('status') == 'i')
.select('name',
'id',
'prod',
'date')
.groupby('name',
'id',
'date'
.agg(
sf.count('prod').alias('count')
)
这工作正常,但我也希望看到count
= 0 的行account
没有带有status = i
. 有没有一种方法可以有条件地聚合,类似于这个?
count = (
t1
.select('name',
'id',
'prod',
'status',
'date')
.groupby('name',
'id',
'date'
.agg(
if no rows with status = i, 0
else sf.count('prod').alias('count')
)
解决方案
您可以尝试使用when
语句进行条件计数:
count = (
t1
.select('name',
'id',
'prod',
'date',
'status')
.groupby('name',
'id',
'date'
.agg(
sf.count(
sf.when(sf.col('status') == 'i', sf.col('prod'))
).alias('count')
)
)
但是如果每个组可以包含不同的状态,下面的代码可能会给出不同的结果:
count = (
t1
.select('name',
'id',
'prod',
'date',
'status')
.groupby('name',
'id',
'date'
.agg(
sf.when(~sf.max(sf.col('status') == 'i'), 0)
.otherwise(sf.count('prod'))
.alias('count')
)
)
推荐阅读
- javascript - 浏览动态生成的详细信息页面 - OpenUi5
- python - 列表索引超出范围:我不知道如何解决
- javascript - socketio:由于传输错误导致套接字关闭导致数据丢失
- javascript - 谷歌饼图很小但占用很大的面积
- python - 关闭所有客户端后关闭服务器
- javascript - 设置属性后删除对象
- javascript - Ionic4 / mobile Safari - 如果存在角度裁剪器组件,模式上的按钮不会触发点击事件
- python - 如何优化python中向量函数的最小化?
- algorithm - Big O Notation - 自然数 M 和常数因子 C 是什么意思?
- azure - 如何通过 ARM 模板中的 ObjectID 获取 Azure AD 安全组名称?