gpt4 book ai didi

apache-spark - 如何仅在 Apache Spark SQL 中的某些列上按汇总分组?

转载 作者:行者123 更新时间:2023-12-04 14:13:12 25 4
gpt4 key购买 nike

我在 Databricks 7.0 运行时集群中使用 Spark 3.0 的 SQL API。我知道我可以执行以下操作:

select
coalesce(a, "All A") as colA,
coalesce(b, "All B") as colB,
sum(c) as sumC
from
myTable
group by rollup (
colA,
colB
)
order by
colA asc,
colB asc
然后我希望输出如下:
+-------+-------+------+
| colA | colB | sumC |
+-------+-------+------+
| All A | All B | 300 |
| a1 | All B | 100 |
| a1 | b1 | 30 |
| a1 | b2 | 70 |
| a2 | All B | 200 |
| a2 | b1 | 50 |
| a2 | b2 | 150 |
+-------+-------+------+
但是,我正在尝试编写一个只需要汇总 b 列的查询。我写过类似的东西:
select
a as colA,
coalesce(b, "All B") as colB,
sum(c) as sumC
from
myTable
group by
a,
rollup (b)
order by
colA asc,
colB asc
我希望输出如下:
+-------+-------+------+
| colA | colB | sumC |
+-------+-------+------+
| a1 | All B | 100 |
| a1 | b1 | 30 |
| a1 | b2 | 70 |
| a2 | All B | 200 |
| a2 | b1 | 50 |
| a2 | b2 | 150 |
+-------+-------+------+
我知道至少在某些 SQL API 中支持这种操作,但是我得到 Error in SQL statement: UnsupportedOperationException尝试运行上述查询时。有谁知道这种行为是否只是在 Spark 3.0 中尚不支持,或者我只是语法错误? docs对这个主题没有帮助。
我知道我可以通过 union all 完成此操作,但我宁愿避免这条路线,即使只是为了优雅和简洁。
提前致谢,如果我能澄清任何事情,请告诉我。

最佳答案

试试这个 GROUPING SETS选项:

%sql
SELECT
COALESCE( a, 'all a' ) a,
COALESCE( b, 'all b' ) b,
SUM(c) c
FROM myTable
GROUP BY a, b
GROUPING SETS ( ( a , b ), a )
ORDER BY a, b
我的结果(更新后的数字):
My results

关于apache-spark - 如何仅在 Apache Spark SQL 中的某些列上按汇总分组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62684562/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com