Spark中的RDD的分区算法值得借鉴

42次阅读

共计 525 个字符,预计需要花费 2 分钟才能阅读完成。

Spark 中的 RDD 的分区算法


def positions(length: Long, numSlices: Int): Iterator[(Int, Int)] = {(0 until numSlices).iterator.map { i =>
        val start = ((i * length) / numSlices).toInt
        val end = (((i + 1) * length) / numSlices).toInt
        (start, end)
      }
}


/**

  • numSlices 分区数
  • (0 until numSlices).iterator 是将分区数变成 Iterator,再通过 map 算法将
  • 0->0 转换成 0->(0,n) 这种结构,就是说 0 号分区读取 0 到 n 个数据集。
  • map 算法中的实现为:
  • val start = ((i * length) / numSlices).toInt
  • val end = (((i + 1) * length) / numSlices).toInt
  • 最终返回 Iterator[(start,end)]
  • 这样就可以尽量平均的把数据集分配到每一个分区

*
*/

大数据集群中经常碰到需要把数据分区分片,分配到集群中的各个节点执行,以调动集群资源来同步执行同一个任务,这样会大大加快任务的执行效率。所以优秀的分区算法是不可或缺的一部分。

正文完
 0