2016-12-02 6 views
0

Ich habe zwei RDDs der gleichen Länge, und ich möchte sie zufällig zusammen zippen (zB erste RDD ist (A, B, C, D) und zweite ist (W, X, Y, Z) und ich möchte eine zufällige zip wie (AX, BZ, CW, DY). Was für eine schnelle Art und Weise ist dies mit pySpark zu tun?Funke: Scramble RDDs und zip sie

Antwort

0

das ist, was Sie?

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

ich will nicht zu 'take', ich mit dem Reißverschluss alten RDDs in zufälliger Reihenfolge ein neues RDD will Und es sieht lik. e 'sample' mit dem Bruch' 1.0' sortiert die Dinge nicht neu. – cgreen

0

Sie benötigen können :

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()