【发布时间】:2016-01-21 12:40:00
【问题描述】:
我正在从 HDFS 获取数据并将其存储在 Spark RDD 中。 Spark 根据 HDFS 块的数量创建分区数量。这会导致大量空分区,这些分区也会在管道期间进行处理。为了消除这种开销,我想从 RDD 中过滤掉所有的空分区。我知道合并和重新分区,但不能保证所有空分区都会被删除。
还有其他方法可以解决这个问题吗?
【问题讨论】:
-
"这会导致大量的空分区,在管道过程中也会被处理" 这句话我没看懂。为什么以及何时创建这些空分区?
-
假设我正在使用 Hive 获取数据,并且我的 hdfs 有 500 个给定 Hive 表的文件块,在这种情况下,将在 RDD 中创建 500 个分区。稍后在执行 groupbykey 时,会留下空分区。
-
如果您对数据有一些先验知识,您可以使用
RangePartitioner或HashPartitioner重新分区。如果没有,您可以使用基于随机数的分区。 -
我会说空分区会自动删除并且Spark不会处理,虽然我不是100%肯定。
-
@MikelUrkia 空分区不会被删除(您可以在 Spark UI 中看到它们)。但是,在执行
repartition... 之后,我从未经历过空分区
标签: hadoop apache-spark pyspark rdd