【问题标题】:Spark performance enhancements by storing sorted Parquet files通过存储排序的 Parquet 文件提高 Spark 性能
【发布时间】:2017-03-27 14:06:16
【问题描述】:

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

【问题讨论】:

    标签: sorting apache-spark parquet


    【解决方案1】:

    排序有很多好处:

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

    如果您想过滤该列上的单列分区可以更有效并且不需要洗牌,尽管目前存在一些相关问题:

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-19
      相关资源
      最近更新 更多