Spark中sort和orderBy函数有什么区别

Rah*_*rma 13 apache-spark spark-dataframe

sort和orderBy spark DataFrame有什么区别?

scala> zips.printSchema
root
 |-- _id: string (nullable = true)
 |-- city: string (nullable = true)
 |-- loc: array (nullable = true)
 |    |-- element: double (containsNull = true)
 |-- pop: long (nullable = true)
 |-- state: string (nullable = true)
Run Code Online (Sandbox Code Playgroud)

以下命令产生相同的结果:

zips.sort(desc("pop")).show
zips.orderBy(desc("pop")).show
Run Code Online (Sandbox Code Playgroud)

Shi*_*nsh 22

OrderBy只是sort函数的别名.

从Spark文档:

  /**
   * Returns a new Dataset sorted by the given expressions.
   * This is an alias of the `sort` function.
   *
   * @group typedrel
   * @since 2.0.0
   */
  @scala.annotation.varargs
  def orderBy(sortCol: String, sortCols: String*): Dataset[T] = sort(sortCol, sortCols : _*)
Run Code Online (Sandbox Code Playgroud)

  • 我们必须正确分类才能清楚地理解它。Spark sql: order by- 中的子句进行整体排序。排序依据:分区明智排序。Spark DataFrame api 中的函数:sort()、orderBy():进行整体排序。sortWithinPartitions():分区明智排序。 (4认同)
  • 但在pyspark中,我可以发现orderby只是排序函数的别名https://github.com/apache/spark/blob/0c9c8ff56933e6ae13454845e831746360af84e3/python/pyspark/sql/dataframe.py#L1423 (3认同)
  • 即使在scala中,orderby也是排序函数的别名https://github.com/apache/spark/blob/5d74ace648422e7a9bff7774ac266372934023b9/sql/core/src/main/scala/org/apache/spark/sql/Dataset.scala#L1306 (3认同)
  • 从spark文档来看,SORT BY和ORDER BY似乎不一样。https://spark.apache.org/docs/latest/sql-ref-syntax-qry-select-sortby.html 我错过了什么吗? (2认同)

小智 6

他们是不是SAME

所述排序子句用于返回在用户指定的顺序在每个分区内排序的结果行。当有多个分区时 SORT BY 可能会返回部分排序的结果。

参考:https : //spark.apache.org/docs/latest/sql-ref-syntax-qry-select-sortby.html

ORDER BY子句用于以排序的方式在用户指定的顺序返回结果行。与 SORT BY 子句不同,该子句保证输出中的总顺序。

参考:https : //spark.apache.org/docs/latest/sql-ref-syntax-qry-select-orderby.html

  • 如果是这样的话,使用 sort by 到底有什么用呢?我实际上还没有注意到多分区中的这种区别。 (3认同)
  • 在 SQL API 中,“SORT BY”和“ORDER BY”之间存在差异。问题出在 Scala API 中,其中 DataFrame 方法“sort()”和“orderBy()”实际上执行相同的操作。为了执行 SQL“SORT BY”,Scala 有“sortWithinPartitions()”。PySpark API 中也是如此。 (3认同)