【问题标题】:randomSplit don't respect specific weights PySparkrandomSplit 不尊重特定权重 PySpark
【发布时间】:2017-03-29 03:15:33
【问题描述】:

我正在使用 PySpark,我正在寻找一种将 RDD 随机拆分为 n 个公平部分的方法。给定:

RDD = sc.parallelize(range(50))

我的代码:

from itertools import repeat

def split_population_into_parts(rdd):

    N = 4

    weight_part = float(1) / float(N)

    weights_list = list(repeat(weight_part, N))

    repartionned_rdd = rdd.randomSplit(weights = weights_list)

    #And just to check what weights give, I did :
    for i in repartionned_rdd:

        print len(i.collect())


split_population_into_parts(rdd = RDD)

知道 weights = [0.25, 0.25, 0.25, 0.25],我的代码可以举个例子(作为 RDD 长度):

9
19
11
11

为什么 randomSplit 在这里不尊重权重?例如,我希望以 12、12、12 和 14 作为长度,或 12、12、13 和 13。最有效的方法是什么?谢谢!

【问题讨论】:

    标签: python apache-spark pyspark spark-dataframe rdd


    【解决方案1】:

    相同的权重不能保证相同的记录数。它只保证每个对象都有相同的概率被分配到一个特定的子集。

    如果记录数很少,您会看到像这里这样的波动。这是正常行为。

    【讨论】:

    • LostInOverflow :谢谢,但真的没有办法让部分公平吗?
    • 具有良好的统计特性和良好的性能?可能不是。如果您确实需要,您可以按随机键、zipWithIndex 排序并执行多个具有明确范围的过滤器。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-21
    • 2019-09-13
    • 1970-01-01
    • 1970-01-01
    • 2019-10-01
    相关资源
    最近更新 更多