我正在尝试编写一个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子句中。
非常感谢任何帮助。
答案 0 :(得分:0)
运行SQL查询时,在WHERE
,JOIN
,GROUP BY
和ORDER BY
子句运行之前,它不会计算每个查询的别名但它确实在任何HAVING
条款之前这样做了。因此,您不能ORDER BY
total_retweets,您需要订购sum(retweets)