我已经创建了一个sql代码,我想把它转换成pyspark代码。除了一件事,它是有效的。但如何才能最好地插入求和函数。
SELECT r_date, abc_code, sum(case when kpi_id=1234 then value else null end) as XXX,
sum(case when kpi_id=5678 then value else null end) as YYY from rate
WHERE abc_code = 'AS55' AND org_id = '12-3'
GROUP BY r_date, abc_code
ORDER BY r_date DESC, abc_code;
Pypark代码
rate_df = rate_df.select(
'org_id',
'abc_code',
'value',
'r_date',
expr("case when kpi_id == '1234' then value else ' ' end").alias('XXX'),
expr("case when kpi_id == '5678' then value else ' ' end").alias('YYY')
) \
.where((F.col('abc_code') == 'AS55') &
(F.col('organisation_id') == '12-3'))
如何在pyspark中插入sum函数以获得一行中的值。
2条答案
按热度按时间qxgroojn1#
把钥匙放好
where
首先,然后groupBy
,最后放入agg
:dgtucam12#
我实现了以下代码:
我得到的结果不是所有匹配行的总和。
r\u datekpi\u dateorganization\u id\u codeb\u emplyyyyy2020-12-022020-11-01 00:0012-3as55a1.0000null2020-12-022020-11-01 00:0012-3as55null1.00002020-11-022020-10-01 00:0012-3as55anull1.00002020-11-022020-10-01 00:00:0012-3as55null1.0000null2020-10-022020-09-01 00:0012-3as55a20202.0000a2020-10-022020-09-0100:00:0012-3as55null1.00002002-09-222020-08-01 00:00:0012-3as55null1.00001.00002002-09-222020-08-01 00:00:0012-3as55anullnull
虽然我有同样的约会。会是因为加入吗?
如果我运行sql代码,就会得到这个结果
r\u datekpi\u dateorganization\u id\u codeb\u emplyyyyy2020-12-022020-11-01 00:0012-3as55a1.00002.00002020-11-022020-10-01 00:0012-3as55a1.00002.00002020-10-022020-09-01 00:00:0012-3as55a2.00001.00002020-09-2220200-08-01 00:00:0012-3as55null2.00001.0000