我想获得 pyspark 中平均评分最高的语言
Posted
技术标签:
【中文标题】我想获得 pyspark 中平均评分最高的语言【英文标题】:I wanted to get the language which has the highest average rating in pyspark 【发布时间】:2021-05-24 09:15:37 【问题描述】:我已经在数据块中的 pyspark notebook 中连接了 MongoDB,然后
rating.createOrReplaceTempView("rat")
使用这个用过的 spark SQL
lan = spark.sql("select language from (select language, avg(imdbRating), max(avg(imdbRating)) as m from rat group by language) group by language having avg(imdbRating) = m").show()
它正在抛出这个错误:
分析异常:不允许在另一个聚合函数的参数中使用聚合函数。请在子查询中使用内部聚合函数。;;
知道我哪里出错了。
编辑: 结果如下
+--------------------+
| language|
+--------------------+
|English, Dutch, F...|
+--------------------+
【问题讨论】:
【参考方案1】:您可以使用子查询并分配等级来获得最高评分的语言:
lan = spark.sql("""
select language
from (
select language, rank() over (order by avg_rating desc) as rn
from (
select language, avg(imdbRating) as avg_rating
from rat
group by language
)
) where rn = 1
""")
【讨论】:
谢谢,它有效,但结果在一行中,我尝试使用 row_number() 但这不起作用如何在不同的行中获得这些结果? 不同的行是什么意思?能否请您举例说明一下? 结果出现在单行中,例如英语、法语、印地语等,我想要的是它们应该出现在单独的行中。 @RishiPandey 你确定老鼠表中的每一行只有一种语言吗? 好吧,上面的代码不会对语言列进行任何聚合,所以如果一行中有多种语言,则代码的其他部分可能有问题。跨度>以上是关于我想获得 pyspark 中平均评分最高的语言的主要内容,如果未能解决你的问题,请参考以下文章