【问题标题】:How does Sparks RDD.randomSplit actually split the RDDSparks RDD.randomSplit 如何实际拆分 RDD
【发布时间】:2016-01-01 04:43:57
【问题描述】:

所以假设我有一个 3000 行的 rdd。前 2000 行属于 1 类,最后 1000 行属于 2 类。 RDD 被划分为 100 个分区。

拨打RDD.randomSplit(0.8,0.2)

该函数是否也对 rdd 进行洗牌?我们的拆分是否只是连续采样 rdd 的 20%?还是随机选择20%的分区?

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

谢谢

【问题讨论】:

    标签: apache-spark rdd


    【解决方案1】:

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

    使用一组BernoulliCellSamplers 对每个分区进行采样。对于每个拆分,它迭代给定分区的元素,如果下一个随机 Double 的值在归一化权重定义的给定范围内,则选择项目。给定分区的所有采样器都使用相同的 RNG 种子。就是这个意思:

    • 不洗牌一个 RDD
    • 除非偶然,否则不会连续格挡
    • 从每个分区中随机抽取一个样本
    • 采用非重叠样本
    • 要求对数据进行 n-splits 传递

    【讨论】:

      猜你喜欢
      • 2019-09-19
      • 1970-01-01
      • 1970-01-01
      • 2016-01-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多