spark DataFrameOrderBy和dataframewriter sortby有区别吗?

ffx8fchx  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(297)

排序前后的输出是否有差异 .write Dataframe上的命令?

val people : DataFrame[Person]

people
        .orderBy("name")
        .write
        .mode(SaveMode.Append)
        .format("parquet")
        .saveAsTable("test_segments")

val people : DataFrame[Person]

people
        .write
        .sortBy("name")
        .mode(SaveMode.Append)
        .format("parquet")
        .saveAsTable("test_segments")
zvms9eto

zvms9eto1#

代码中的注解解释了它们之间的区别:
orderby:是一个数据集/Dataframe操作。返回按给定表达式排序的新数据集。这是排序函数的别名。
sortby:是一个dataframewriter操作。按给定列对每个bucket中的输出进行排序。
这个 sortBy 方法仅在同时定义bucket时有效( bucketBy ). 否则会出现异常:

if (sortColumnNames.isDefined && numBuckets.isEmpty) {
  throw new AnalysisException("sortBy must be used together with bucketBy")
}

中定义的列 sortBy 在bucketspec中用作 sortColumnNames 如下图所示:

Params:
numBuckets – number of buckets.
bucketColumnNames – the names of the columns that used to generate the bucket id.
sortColumnNames – the names of the columns that used to sort data in each bucket.

case class BucketSpec(
    numBuckets: Int,
    bucketColumnNames: Seq[String],
    sortColumnNames: Seq[String])

相关问题