Sparks RDD.randomSplit如何实际拆分RDD

Mad*_*zor 17 apache-spark rdd

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

打电话的时候 RDD.randomSplit(0.8,0.2)

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

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

谢谢

zer*_*323 30

对于由weights数组定义的每个范围,都有一个单独的mapPartitionsWithIndex转换,它保留了分区.

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

  • 不会改变RDD
  • 除了偶然之外不会持续连续阻挡
  • 从每个分区中获取随机样本
  • 采用非重叠样本
  • 要求n分裂通过数据