Spark SQL 查询:org.apache.spark.sql.AnalysisException
Posted
技术标签:
【中文标题】Spark SQL 查询:org.apache.spark.sql.AnalysisException【英文标题】:Spark SQL query: org.apache.spark.sql.AnalysisException 【发布时间】:2015-08-12 14:37:57 【问题描述】:我正在尝试为 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】:当您运行 SQL 查询时,它不会计算解析每个查询的别名,直到 WHERE
、JOIN
、GROUP BY
和 ORDER BY
子句运行之后(但它会在任何 @ 987654325@ 子句)。因此你不能ORDER BY
total_retweets,你需要订购sum(retweets)
【讨论】:
以上是关于Spark SQL 查询:org.apache.spark.sql.AnalysisException的主要内容,如果未能解决你的问题,请参考以下文章
使用java将oracle数据库连接到apache spark时出错
Spark SQL - 在 Spark Streams 上部署 SQL 查询的选项
Spark SQL 查询:org.apache.spark.sql.AnalysisException
将 spark.sql 查询转换为 spark/scala 查询