相同查询的 Spark sql 版本不起作用,而普通 sql 查询则起作用

Posted

技术标签:

【中文标题】相同查询的 Spark sql 版本不起作用,而普通 sql 查询则起作用【英文标题】:Spark sql version of the same query does not work whereas the normal sql query does 【发布时间】:2017-07-05 11:27:47 【问题描述】:

正常的sql查询:

    SELECT DISTINCT(county_geoid), state_geoid, sum(PredResponse), sum(prop_count) FROM table_a GROUP BY county_geoid;

给我一​​个输出。但是,在 pyspark 中使用的同一查询的 spark sql 版本给了我一个错误。如何解决这个问题?

    result_county_performance_alpha = spark.sql("SELECT distinct(county_geoid), sum(PredResponse), sum(prop_count), state_geoid FROM table_a group by county_geoid")

这给出了一个错误:

AnalysisException: u"expression 'tract_alpha.`state_geoid`' 既不存在于 group by 中,也不是聚合函数。如果您不关心,请添加到 group by 或包裹在 first()(或 first_value)中你得到什么价值。;

如何解决这个问题?

【问题讨论】:

【参考方案1】:

您的“正常”查询不应该在任何地方工作。编写查询的正确方法是:

SELECT county_geoid, state_geoid, sum(PredResponse), sum(prop_count)
FROM table_a
GROUP BY county_geoid, state_geoid;

这应该适用于任何数据库(列和表已定义且类型正确)。

您的版本在SELECT 中有state_geoid,但它没有被聚合。那不是正确的SQL。它可能恰好在 mysql 中工作,但这是由于数据库中的一个(错误)功能(即最终被修复)。

此外,您几乎不想将SELECT DISTINCTGROUP BY 一起使用。而且,DISTINCT 后面的括号没有区别。构造是SELECT DISTINCTDISTINCT 不是函数。

【讨论】:

哪个功能?你能解释一下为什么它只在mysql中有效吗? 我理解不同的使用是一个错误,但是当在 mysql 中使用 group by 和 state_geoid 时,答案会有所不同。

以上是关于相同查询的 Spark sql 版本不起作用,而普通 sql 查询则起作用的主要内容,如果未能解决你的问题,请参考以下文章

SQL 查询在最新版本的 MySQL 中不起作用

SQL 查询:HAVING date = MAX(date) 不起作用

ASP.NET MVC C# Razor SQL 1 of 2 几乎相同的更新查询不起作用

用于查找不同元素的 SQL 查询不起作用

在 spark 1.6 中计数(不同)不能与 hivecontext 查询一起使用

spark magic - 输入sql context作为字符串