合并两个 RDD,其中键不相同但相关



在pyspark中,考虑两个rdd,如下所示:

rrd1 = [('my name',5),('name is',4)]

rdd2 = [('my',6),('name',10),('is',5)]

其中 RDD1 是双元组和计数的元组,

RDD2 是相应 unigram 和计数的元组,我想要一个包含 3 个元素的元组的 RDD,例如:

RDD = [ (('my name',5),('my',6),('name',10)) , (('name is',4), ('name',10),('is',5)) ]

我尝试了rdd2.union(rdd1).reduceByKey(lambda x,y : x+y)但在这种情况下,这不是正确的方法,因为键是不同的,但从某种意义上说它们是相关的

你可以

这样做;拆分双元组 rdd 以生成一个键以与rdd2连接,然后按双元组以将属于同一双元组的元素收集在一起:

(rdd1.flatMap(lambda x: [(w, x) for w in x[0].split()])    
     .join(rdd2.map(lambda x: (x[0], x)))
     .map(lambda x: x[1])
     .groupBy(lambda x: x[0])
     .map(lambda kv: (kv[0],) + tuple(v[1] for v in kv[1]))
     .collect())
# [(('name is', 4), ('name', 10), ('is', 5)), (('my name', 5), ('name', 10), ('my', 6))]

最新更新