gpt4 book ai didi

apache-spark - Spark 是否受益于持久表中的 `sortBy`?

转载 作者:行者123 更新时间:2023-12-04 17:38:02 25 4
gpt4 key购买 nike

Spark v2.4 无 Hive

Spark 从 bucketBy 中受益,它知道 DataFrame 具有正确的分区。 sortBy 怎么样?

spark.range(100, numPartitions=1).write.bucketBy(3, 'id').sortBy('id').saveAsTable('df')

# No need to `repartition`.
spark.table('df').repartition(3, 'id').explain()
# == Physical Plan ==
# *(1) FileScan parquet default.df2[id#33620L] Batched: true, Format: Parquet, Location: InMemoryFileIndex[df], PartitionFilters: [], PushedFilters: [], ReadSchema: struct<id:bigint>, # SelectedBucketsCount: 3 out of 3

# Still need to `sortWithinPartitions`.
spark.table('df').sortWithinPartitions('id').explain()
# == Physical Plan ==
# *(1) Sort [id#33620L ASC NULLS FIRST], false, 0
# +- *(1) FileScan parquet default.df2[id#33620L] Batched: true, Format: Parquet, Location: InMemoryFileIndex[df], PartitionFilters: [], PushedFilters: [], ReadSchema: struct<id:bigint>, SelectedBucketsCount: 3 out of 3

因此省略了额外的repartition。但是,sortWithinPartitions 不是。 sortBy 有用吗?我们可以使用 sortBy 来加速表连接吗?

最佳答案

简答:sortBy 在持久表中没有任何好处(至少目前是这样)。

更长的答案:

Spark 和 Hive 在bucketing 支持方面没有实现相同的语义操作 规范,尽管 Spark 可以保存 bucketed DataFrame到 Hive 表中。

首先,两个框架之间的存储单位不同:单个存储桶文件 (hive) 与每个存储桶的文件集合 (spark)。

其次

Hive 中,每个桶都是全局排序的,可以优化查询读取数据。

Spark 中,直到这个问题 https://issues.apache.org/jira/browse/SPARK-19256得到(希望)解决,每个文件都单独排序,但整个存储桶没有全局排序。

因此,由于排序不是全局的sortBy 没有任何好处

我希望这能回答您的问题。

关于apache-spark - Spark 是否受益于持久表中的 `sortBy`?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55840365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com