窗口聚合还是普通聚合?

时间:2020-04-18 01:47:08

标签: function apache-spark window

我的表总共有8107行。

假设我在具有输出的Window列上按“国家”找到“ avg(海拔高度)”分组:

avg = ap.withColumn('avg_alt',mean(ap.altitude).over(Window.partitionBy(ap.country)))

o / p:8107行

与spark.sql-

相同
select avg(altitude) from table group by country

o / p:240行

哪个是正确的输出?

我应该使用window还是普通的sql?

从技术上来讲,两者都是正确的,但是窗口为每一行给出了

1 个答案:

答案 0 :(得分:0)

两个输出都是正确的,只是输出格式不同。就像您正确提到的那样,窗口方法会将平均高度附加到数据框的每一行,而SQL分组方法将仅具有每个国家/地区的平均高度。
在大多数情况下,您只想使用分组和汇总的结果(例如,要绘制结果,或显示最高/最低的国家/地区等)
如果您想进行进一步的计算,则最好采用窗口方法(例如,如果要查找与平均海拔高度差异最大的位置)。