我想获得 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 中平均评分最高的语言的主要内容,如果未能解决你的问题,请参考以下文章

显示 laravel 中评分最高的餐厅

自作评分游戏

零基础学习java------27---------电影评分数据案例

Pandas实现groupby分组聚合后不同列数据统计

PySpark:使用过滤器功能后取一列的平均值

C语言 大赛现场统分