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 查询时,它不会计算解析每个查询的别名,直到 WHEREJOINGROUP BYORDER BY 子句运行之后(但它会在任何 @ 987654325@ 子句)。因此你不能ORDER BYtotal_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 查询

spark sql - 如何在 spark sql 中编写动态查询

Spark/scala 中的 SQL 查询