通过存储已排序的Parquet文件来增强Spark性能

时间:2016-11-14 00:08:37

标签: sorting apache-spark parquet

如果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")

1 个答案:

答案 0 :(得分:2)

排序提供了许多好处:

  • 使用文件元数据进行更有效的过滤。
  • 更高效的压缩率。

如果您希望过滤该列上的单列分区可能更有效,并且不需要随机播放,尽管现在存在一些相关问题: