2016-12-02 74 views
0

我具有相同長度的兩個RDDS,我想隨機壓縮在一起(例如,第一RDD是(A,B,C,d)和第二個是(W,X, Y,Z)和我要像一個隨機拉鍊(AX,BZ,CW,DY)。什麼是做到這一點使用pySpark的快捷方式?火花:加擾RDDS和壓縮它們

回答

0

這是你需要什麼?

x = sc.parallelize(['A','B','C','D']) 
y = sc.parallelize(['W','X','Y','Z']) 
x = x.takeSample(False, 4) 
y = y.takeSample(False, 4) 
combine = zip(x,y) 
combine 
>> [('D', 'Z'), ('B', 'X'), ('A', 'W'), ('C', 'Y')] 
+0

我不想'take',我希望有一個新的RDD與壓縮舊RDDS隨機順序看起來LIK。具有'1.0'分數的'sample'不會重新排序。 – cgreen

0

你可以:

from pyspark.sql.functions import rand 

s = lambda x: (x[1], x[0]) 

def shuffle(rdd): 
    return rdd.map(lambda x: (x,)) \ 
       .toDF(["data"]).withColumn("rand", rand()) \ 
       .orderBy("rand") \ 
       .rdd.map(lambda x: x.data) 

shuffle(rdd1).zipWithIndex().map(s).join(rdd2.zipWithIndex().map(s)).values()