如何在 sparkSQL 中使用从子查询中获取单个值
Posted
技术标签:
【中文标题】如何在 sparkSQL 中使用从子查询中获取单个值【英文标题】:How can I use get a single value from my subquery in sparkSQL 【发布时间】:2021-06-08 07:13:06 【问题描述】:我正在使用 SparkSQL
spark.sql("""
SELECT artist, count(distinct(song))
FROM user_log_table WHERE artist =
(SELECT artist
FROM user_log_table
GROUP BY artist
ORDER BY count(artist) DESC
LIMIT 1 )
""").show()
这是我的查询,我只运行了子查询,它给了我一个我正在寻找的值,然后我想在 where 子句中使用该值,但我得到了错误
调用 o22.sql 时出错。 :org.apache.spark.sql.AnalysisException:分组表达式序列为空,并且'user_log_table.`artist`'不是聚合函数。在窗口函数中包装 '(count(DISTINCT user_log_table.`song`) AS `count(DISTINCT song)`)' 或在 first() (或 first_value)中包装 'user_log_table.`artist`' 如果你不这样做关心你得到的价值。;;
【问题讨论】:
【参考方案1】:您希望拥有最多日志条目的一位艺术家的歌曲计数。如果有两位艺术家的日志条目数相同,您可以任意选择一位。至少这是您的查询所做的。而且您不需要子查询:
SELECT
artist,
COUNT(DISTINCT song)
FROM user_log_table
GROUP BY artist
ORDER BY COUNT(*) DESC
LIMIT 1;
这为您提供了具有两个值(艺术家和歌曲数量)的一行。当然,如果您只需要这两个值之一,则可以从 select 子句中删除 artist
或 COUNT(distinct song)
。
【讨论】:
以上是关于如何在 sparkSQL 中使用从子查询中获取单个值的主要内容,如果未能解决你的问题,请参考以下文章