在 pyspark 中,考虑两个 rdd,例如:
rrd1 = [('我的名字',5),('名字是',4)]
和
rdd2 = [('我的',6),('名字',10),('是',5)]
其中rdd1是二元组和计数的元组,rdd2是相应的一元元组和计数的元组, 我想要一个包含 3 个元素的元组的 RDD,例如:
RDD = [ (('我的名字',5),('我的',6),('名字',10)) , (('名字是',4), ('名字' ,10),('是',5))]
我尝试了rdd2.union(rdd1).reduceByKey(lambda x,y : x+y)
但在这种情况下这不是正确的方法,因为键不同但是 在某种意义上它们是相关的。
最佳答案
你可以这样做;拆分bigram rdd以生成与rdd2
连接的 key ,然后按bigram分组以将属于同一bigram的元素收集在一起:
(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))]
关于python - 合并两个键不同但相关的 RDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43943080/