【问题标题】:ORDER BY vs SORT BY in Spark SQLSpark SQL 中的 ORDER BY 与 SORT BY
【发布时间】:2020-08-13 17:24:26
【问题描述】:

我使用Spark 2.4,使用%sql模式查询表。

如果我在大型数据集上使用 Window 函数,那么从查询性能的角度来看,ORDER BYSORT BY 之间的哪一个会更有效?

我知道ORDER BY 确保全局排序,但计算只推送到1 reducer。但是,SORT BY 将在每个分区内进行排序,但分区可能会收到重叠的范围。

我想了解在这种情况下是否也可以使用SORT BY?在处理大型数据集(比如100 M 行)时,哪一个效率更高?

例如

ROW_NUMBER() OVER (PARTITION BY prsn_id ORDER BY purch_dt desc) AS RN

VS

ROW_NUMBER() OVER (PARTITION BY prsn_id SORT BY purch_dt desc) AS RN

谁能帮忙。谢谢。

【问题讨论】:

标签: apache-spark apache-spark-sql


【解决方案1】:
  • 使用SORT BYORDER BY 都没有关系。您可能会提到一个关于 Hive 的概念,但您使用的是 Spark,没有这样的问题。

  • 对于partition BY ...只有在您没有任何可分区依据的情况下,1 Reducer 方面才会成为问题。你确实有 prsn_id,所以不是问题。

【讨论】:

    【解决方案2】:

    sort by 应用于每个存储桶,并不保证整个数据集都已排序。 但是order by 应用于整个数据集(在单个减速器中)。 由于您的查询针对每个分区键进行了分区和排序/排序,因此两种用法都返回相同的输出。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-22
      • 2015-10-07
      • 1970-01-01
      • 2014-08-31
      • 1970-01-01
      • 2014-09-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多