普通的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“表达式'tract_alpha.`state_geoid`'不在group by中,也不是聚合函数。添加到group by或包装在first()(或first_value)中,如果您不在乎您使用哪个值得到。;

如何解决这个问题?

最佳答案

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

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不是函数。

10-07 16:20
查看更多