类似于 Spark 中的 groupByKey() 但使用 SQL 查询

Posted

技术标签:

【中文标题】类似于 Spark 中的 groupByKey() 但使用 SQL 查询【英文标题】:similar to groupByKey() in Spark but using SQL queries 【发布时间】:2021-03-15 00:26:20 【问题描述】:

我试着做

 ID    CATEGORY  VALUE
'AAA'    'X'      123
'AAA'    'Y'      456
'BBB'    'X'      321
'BBB'    'Y'      654

进入

 ID     VALUE_X   VALUE_Y
'AAA'     123       456
'BBB'     321       654

仅使用 SQL 查询。 这有点类似于在 pyspark 中使用 groupByKey()。

有没有办法做到这一点?

【问题讨论】:

【参考方案1】:

只需使用条件聚合。一种方法是:

select id,
       max(case when category = 'X' then value end) as x_value,
       max(case when category = 'Y' then value end) as y_value
from t
group by id;

在 Postgres 中,这将使用标准的 filter 子句来表述:

select id,
       max(value) filter (where category = 'X'),
       max(value) filter (where category = 'Y')
from t
group by id;

【讨论】:

为什么我们需要一个最大值? @jginso7 。 . .你需要一个聚合函数,max() 很方便,因为它适用于所有类型。 您好,还有一个问题... 什么是某些 ID 对 CATEGORY 没有价值?比如说,ID 'CCC' 只有 CATEGORY 'X' VALUE '123',但没有其他行。为此我想要CCC 123 0 如果没有key,则值为NULL。您可以将表达式包装在coalesce()coalesce(max(value) filter (where category = 'Y'), 0)

以上是关于类似于 Spark 中的 groupByKey() 但使用 SQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

spark sql DataFrame 的 groupBy+agg 与 groupByKey+mapGroups

Spark 读取Hbase表数据并实现类似groupByKey操作

在Spark中关于groupByKey与reduceByKey的区别

spark算子

Spark 中的 GroupByKey 函数有那么糟糕吗? [复制]

saprk的groupby和groupbykey的区别