【问题标题】:I wanted to get the language which has the highest average rating in pyspark我想获得 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...|
+--------------------+

【问题讨论】:

    标签: sql mongodb apache-spark pyspark apache-spark-sql


    【解决方案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 你确定老鼠表中的每一行只有一种语言吗?
    • 好吧,上面的代码不会对语言列进行任何聚合,所以如果一行中有多种语言,则代码的其他部分可能有问题。跨度>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    • 2015-03-07
    • 1970-01-01
    相关资源
    最近更新 更多