如果DataFrame在被保存为Parquet文件之前进行排序,数据提取是否会更快地运行。
假设我们有以下peopleDf
DataFrame(假装这是一个样本而真正的那个有200亿行):
+-----+----------------+
| age | favorite_color |
+-----+----------------+
| 54 | blue |
| 10 | black |
| 13 | blue |
| 19 | red |
| 89 | blue |
+-----+----------------+
让我们将此DataFrame的已排序和未排序版本写出到Parquet文件。
peopleDf.write.parquet("s3a://some-bucket/unsorted/")
peopleDf.sort($"favorite_color").write.parquet("s3a://some-bucket/sorted/")
在读取排序数据并根据favorite_color
进行数据提取时,是否有任何性能提升?
val pBlue1 = spark.read.parquet("s3a://some-bucket/unsorted/").filter($"favorite_color" === "blue")
// is this faster?
val pBlue2 = spark.read.parquet("s3a://some-bucket/sorted/").filter($"favorite_color" === "blue")
答案 0 :(得分:2)
排序提供了许多好处:
如果您希望过滤该列上的单列分区可能更有效,并且不需要随机播放,尽管现在存在一些相关问题: