繁体   English   中英

使用Spark在RDD的每个分区中使用固定的最小元素数进行分区

[英]Repartition with a fixed minimum number of elements in each partition of the RDD using Spark

我在每个分区中都有一个具有以下元素数量的RDD(分区总数为val numPart = 32

1351、962、537、250、80、9、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0、0, 15,88,270,635,1028,1388,1509

要查看先前的输出,我使用以下命令:

def countByPartition[A](anRdd: RDD[A]): RDD[Int] = anRdd.mapPartitions(iter => Iterator(iter.length))

println(countByPartition(anRdd).collect.mkString(", "))

我想在每个分区上至少有val min = 5给出的最小数量的元素。

我尝试执行anRdd.repartition(numPart)并得到以下信息:

257、256、256、256、255、255、254、253、252、252、252、252、252、252、252、252、251、250、249、248、248、248、248、248、261, 261、260、260、259、258、258、257

在这种情况下,这是完美的,因为在每个分区中,我都有多个min元素。 但这并不总是一样,有时我会得到一些分区,这些分区的值小于min

有什么方法可以做我想要的吗?

这是不可能的,通常您需要选择分区,以使大小大致均匀。 Spark中的分区程序基本上实现了两种方法numPartitionsgetPartition 后者是从单个键到分区号的功能,因此此时尚不了解其他元素以及分区的潜在大小。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM