Spark SQL查询:org.apache.spark.sql.AnalysisException

时间:2015-08-12 14:37:58

标签: apache-spark-sql

我正在尝试编写一个twitter json文件的查询,通过查看retweetCount来提取最有影响力的人。我需要按用户,他们的时区和转发数量按降序对输出进行分组。 当我运行下面的查询时,我一直得到例外:

  

org.apache.spark.sql.AnalysisExceptionorg.apache.spark.sql.AnalysisException:   给定的输入列无法解析'total_retweets'   t.retweeted_screen_name,t.tz,total_retweets,tweet_count;

sqlContext.sql("""
    SELECT
     t.retweeted_screen_name,
         t.tz,
     sum(retweets) AS total_retweets,
     count(*) AS tweet_count
    FROM (SELECT
            actor.displayName as retweeted_screen_name,
            body,
        actor.twitterTimeZone as tz,
            max(retweetCount) as retweets
          FROM tweetTable WHERE body <> ''
          GROUP BY actor.displayName, actor.twitterTimeZone,
                   body) t
    GROUP BY t.retweeted_screen_name, t.tz
    ORDER BY total_retweets DESC
    LIMIT 10 """).collect.foreach(println)

当我尝试简化此查询时,遇到如下错误:

  

列total_retweets在选择列表中无效,因为它不是   包含在聚合函数或GROUP BY子句中。

非常感谢任何帮助。

1 个答案:

答案 0 :(得分:0)

运行SQL查询时,在WHEREJOINGROUP BYORDER BY子句运行之前,它不会计算每个查询的别名但它确实在任何HAVING条款之前这样做了。因此,您不能ORDER BY total_retweets,您需要订购sum(retweets)