【问题标题】:Repartition with a fixed minimum number of elements in each partition of the RDD using Spark使用 Spark 在 RDD 的每个分区中使用固定的最小元素数重新分区
【发布时间】:2019-05-30 19:05:35
【问题描述】:

我有一个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 , 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 值的分区。

有没有办法做我想做的事?

【问题讨论】:

    标签: scala apache-spark rdd


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-21
      • 1970-01-01
      • 2014-06-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多