使用PySpark将RDD划分为两个或更多公平的RDD

时间:2016-11-09 18:10:59

标签: python apache-spark pyspark rdd partitioning

我正在使用PySpark,而我正在寻找一种方法将RDD划分为n个公平的部分。鉴于:

rdd = sc.parallelize ([(u'28b195c271f', (u'm', u'50c41480')),
                       (u'_guid_UDeL9', (u'f', u'K0r_MuQH')),
                       (u'17503716353', (u'f', u'KUDRwaYm')),
                       (u'171f92200d6', (u'f', u'bdf53cb6')),
                       (u'_guid_NCw7S', (u'f', u'KSJakOd2')),
                       (u'331d8410d49', (u'f', u'1F37807A'))])

这是我的代码:

N = 2
repartionned_rdd = rdd.repartition(N).distinct().glom()

这给了我两个不公平的rdds。 len(repartionned_rdd.collect()[0])给出:2和 len(repartionned_rdd.collect()[1])给出4!结果:

[[(u'28b195c271f', (u'm', u'50c41480')),
 (u'_guid_UDeL9', (u'f', u'K0r_MuQH'))],
 [(u'17503716353', (u'f', u'KUDRwaYm')),
 (u'171f92200d6', (u'f', u'bdf53cb6')),
 (u'_guid_NCw7S', (u'f', u'KSJakOd2')),
 (u'331d8410d49', (u'f', u'1F37807A'))]]

最有效的方法是将两个公平的部分(rdds),3和3作为长度... Thx!

1 个答案:

答案 0 :(得分:1)

也许您对 randomSplit(weigths,seed) function感兴趣:

  

将此RDD与提供的权重分开。

它将返回RDD列表。