我有一个将多个列分组的Spark SQL。我想知道列的顺序是否与查询性能有关。
将列中具有更多不同的值放在前面会有所帮助吗?我假设groupby基于某种哈希/混洗算法。如果第一个groupby可以将数据分发到可以容纳在一台计算机中的小子集,则可以在本地完成后面的groupby。这是真的吗?
groupby的最佳实践是什么?
答案 0 :(得分:2)
group by
在列上使用哈希函数来确定哪一组按键分组将以哪个分区结尾。
您可以使用distribute by
来告诉spark要使用的列-https://docs.databricks.com/spark/latest/spark-sql/language-manual/select.html
对于数据的任何其他操作(例如,较早放置更多不同的值),请注意,如果查询中有2条group by
语句,则最终会产生2次混洗。而且第一个结果显然很大(因为这不是最终的汇总)。因此,我将尝试使用尽可能少的group by
语句。