Sparks RDD.randomSplit如何实际拆分RDD

时间:2015-10-04 11:51:13

标签: apache-spark rdd

所以假设我有一个3000行的rdd。 2000个第一行是1类,最后1000行是class2。 RDD分区为100个分区。

致电RDD.randomSplit(0.8,0.2)

该功能是否也会改变rdd?我们的分裂只是连续20%的rdd样品?或者是随机选择20%的分区?

理想情况下,生成的拆分与原始RDD具有相同的类分布。 (即2:1)

由于

1 个答案:

答案 0 :(得分:29)

对于weights数组定义的每个范围,都有一个单独的mapPartitionsWithIndex转换,可以保留分区。

使用一组BernoulliCellSamplers对每个分区进行采样。对于每个拆分,它迭代给定分区的元素,并选择项,如果下一个随机Double的值在由标准化权重定义的给定范围内。给定分区的所有采样器使用相同的RNG种子。它意味着:

  • 不会改变RDD
  • 不会偶然使用连续的块
  • 从每个分区中随机抽取样本
  • 采用非重叠样本
  • 要求n-splits通过数据