Hadoop 从Spark RDD中删除空分区

Hadoop 从Spark RDD中删除空分区,hadoop,apache-spark,pyspark,rdd,Hadoop,Apache Spark,Pyspark,Rdd,我从HDFS获取数据并将其存储在Spark RDD中。Spark根据HDFS块的数量创建分区的数量。这会导致大量的空分区,这些分区也会在管道过程中得到处理。为了消除这种开销,我想从RDD中过滤掉所有的空分区。我知道合并和重新分区,但不能保证所有空分区都会被删除 还有别的办法吗 从RDD中删除空分区不是一个简单的方法 coalesce不能保证删除空分区。如果一个RDD有40个空白分区,10个有数据的分区,那么在RDD.coalesce(45)之后仍然会有空分区 repartition方法将数据均匀

我从HDFS获取数据并将其存储在Spark RDD中。Spark根据HDFS块的数量创建分区的数量。这会导致大量的空分区,这些分区也会在管道过程中得到处理。为了消除这种开销,我想从RDD中过滤掉所有的空分区。我知道合并和重新分区,但不能保证所有空分区都会被删除


还有别的办法吗

从RDD中删除空分区不是一个简单的方法

coalesce
不能保证删除空分区。如果一个RDD有40个空白分区,10个有数据的分区,那么在
RDD.coalesce(45)
之后仍然会有空分区


repartition
方法将数据均匀地分割到所有分区上,因此不会有任何空分区。如果您有一个RDD,其中有50个空白分区,10个有数据的分区,并运行
RDD.repartition(20)
,那么数据将均匀地分布在20个分区上。

“这会导致大量的空白分区,这些分区也会在管道中得到处理”我不理解这句话。为什么以及何时创建这些空分区?假设我使用配置单元获取数据,并且我的hdfs对于给定的配置单元表有500个文件块,在这种情况下,将在RDD中创建500个分区。稍后执行groupbykey时,会留下空分区。如果您对数据有一些先验知识,可以使用
RangePartitioner
HashPartitioner
重新分区。如果不是,您可以使用基于随机数的分区。我想说空分区会自动删除,不会由Spark处理,尽管我不是100%确定。@MikelUrkia空分区不会被删除(您可以在Spark UI中看到它们)。但是,在执行
重新分区之后,我从未遇到过空分区。。。