首页 > 解决方案 > Spark:联合后减少 RDD 分区

问题描述

尽管使用coalesce(2000),以下代码返回一个包含 22000 个分区的 RDD。

private [sparse]  def internalEvenProportionPerTargetMultivariate1( labelRdd: RDD[(Double, Int)]): RDDLabeledPoint =
{

    val reducedpartsRDDList: Array[RDD[(LabeledPoint, Int, String)]] = preduceParts(proportionForReductionByLabel,labelRdd)
    val newRDD=reducedpartsRDDList.tail.foldLeft(reducedpartsRDDList.head){ (rdd1, rdd2) 
         => rdd1.union(rdd2) }.coalesce(2000)
    new RDDLabeledPoint(newRDD)
}

最初,有一个 RDD 大约有 500 个分区。然后在该方法中将其分解为 44 个子集,preduceParts并从每个子集中删除一些行。

看起来这reducedpartsRDDList: Array[RDD[(LabeledPoint, Int, String)]]是一个由 44 个 RDD 组成的数组,每个 RDD 有 500 个分区,并且union即使在coalesce. 我究竟做错了什么?

标签: scalaapache-spark

解决方案


推荐阅读