繁体   English   中英

如何在 spark sql 中对分区进行求和?

[英]how do I do a sum over partition in spark sql?

spark sql 与我使用的引擎完全不同,它破坏了我的所有代码

这个说法

case when sum(flag = 'Y') over (partition by id) > 0
     then 'Y' else 'N' end as flag

如果给定 id 的任何标志字段为 Y 并且它不起作用,则应该返回 Y,因为 spark 中的 sum function 只能采用数字类型。 有解决方法吗?

您的代码无效 SQL - 它恰好在 MySQL 中有效,但在大多数数据库中无效。

使用CASE表达式,标准 SQL 方法将起作用:

(case when sum(case when flag = 'Y' then 1 else 0 end) over (partition by id) > 0
     then 'Y' else 'N'
 end) as flag

或者,假设flag仅采用'Y''N'的值,您可以将逻辑简化为:

min(flag) over (partition by id) as flag

您可以将 Boolean flag = 'Y'转换为 integer 以便总结:

case when sum(int(flag = 'Y')) over (partition by id) > 0
     then 'Y' else 'N' end as flag

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM