我有两个相同长度的RDD,我想随机地将它们压缩在一起(例如,第一个RDD是(A,B,C,D),第二个是(W,X,Y,Z),我想要一个随机的zip,比如(AX,BZ,CW,DY)。使用pySpark实现这一点的快速方法是什么?
发布于 2016-12-02 21:07:23
这是你需要的吗?
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')]
发布于 2016-12-04 19:53:08
您可以:
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()
https://stackoverflow.com/questions/40940407
复制相似问题