scala - Spark DataFrame orderBy 和 DataFrameWriter sortBy,有区别吗?
问题描述
.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")
解决方案
代码中的注释解释了它们之间的区别:
- orderBy:是 Dataset/Dataframe 操作。返回按给定表达式排序的新数据集。这是排序函数的别名。
- sortBy:是一个DataFrameWriter操作。按给定列对每个桶中的输出进行排序。
该sortBy
方法仅在您还定义存储桶 ( bucketBy
) 时才有效。否则你会得到一个异常:
if (sortColumnNames.isDefined && numBuckets.isEmpty) {
throw new AnalysisException("sortBy must be used together with bucketBy")
}
中定义的列在BucketSpecsortBy
中使用,如下所示: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])
推荐阅读
- c# - 为 sharedDrive 中的用户插入权限
- ruby-on-rails - Ruby on Rails 应用程序在一段时间后返回 504 错误
- python - pd.merge :尝试合并具有相同列名的数据框
- javascript - JavaScript - 如何从 li 元素中移动 href 并覆盖 h2 标签中的 href
- c# - 如何返回列表
在 c++ dll 中到 C# 程序 MarshallDirectiveException - java - 如何为“加入”真实类创建伪接口或类
- javascript - 异步函数内的异步函数返回未定义的值
- react-native - 滚动视图中的反应原生页脚
- ios - 使用 NSFetchRequest 和 NSPredicate 时,SwiftUI 列表更新缓慢
- r - R webscraping一个缓慢/负担过重的(?)网站