Spark SQL - 查找每年一个月的最大值
Posted
技术标签:
【中文标题】Spark SQL - 查找每年一个月的最大值【英文标题】:Spark SQL - Finding the maximum value of a month per year 【发布时间】:2021-01-19 01:00:06 【问题描述】:我创建了一个数据框,其中包含年、月和事件的发生(计数)。
我想使用 spark SQL 查找每年发生最多事件的月份。
【问题讨论】:
【参考方案1】:如果你想使用 SQL,你可以使用窗口函数:
select t.*
from (select t.*,
row_number() over (partition by year order by count desc) as seqnum
from t
) t
where seqnum = 1;
这将每年返回一行,即使存在最大计数的平局。如果您想在出现平局时使用所有此类行,请使用 rank()
而不是 row_number()
。
【讨论】:
我知道,比其他人更快地回答问题是一项艰巨的工作,但有时您应该在发布答案之前阅读答案并转到下一个问题。【参考方案2】:你可以使用窗口函数:
select *
from (select t.*, rank() over(partition by year order by cnt desc) rn from mytable t) t
where rn = 1
对于每一年,这都会为您提供具有最大 cnt
的行。如果有关系,则查询返回它们。
请注意,count
是 SQL 中的语言关键字,因此不是列名的好选择。我在查询中将其重命名为cnt
。
【讨论】:
我是 Spark SQL 的新手,对窗口函数了解不多。没有窗口功能有什么办法可以做到吗? @kimhkh:还有其他选择,但这看起来是这里最简单的方法。我建议先运行子查询,这样您就可以看到结果并了解它是如何工作的。例如:select t.*, rank() over(partition by year order by cnt desc) rn from mytable t order by year, rn
.以上是关于Spark SQL - 查找每年一个月的最大值的主要内容,如果未能解决你的问题,请参考以下文章
为啥 org.apache.spark.sql.types.DecimalType 在 Spark SQL 中的最大精度值为 38?