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

时间:2017-07-05 11:27:47

标签: python mysql apache-spark pyspark apache-spark-sql

正常的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`' is neither present in the group by, nor is it an aggregate function. Add to group by or wrap in first() (or first_value) if you don't care which value you get.;

如何解决此问题?

1 个答案:

答案 0 :(得分:3)

你的"正常"查询不应该在任何地方工作编写查询的正确方法是:

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

这适用于任何数据库(定义了列和表以及正确的类型)。

您的版本在state_geoid中有SELECT,但未汇总。这不是正确的SQL。它可能恰好在MySQL中工作,但这是由于数据库中的(错误)功能(最终被修复)。

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