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

2024-09-28 03:21:38 发布

您现在位置:Python中文网/ 问答频道 /正文

在pyspark中,考虑到两个rdd,比如:

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

以及

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

其中rdd1是二元数和计数的元组,rdd2是相应的单元数和计数的元组, 我想要一个由三个元素组成的元组的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),但在这个例子中这不是正确的方法,因为键不同,但在某种意义上它们是相关的。在


Tags: name元素ismypyspark单元计数元组
1条回答
网友
1楼 · 发布于 2024-09-28 03:21:38

您可以这样做;拆分bigramrdd以生成一个与rdd2连接的键,然后按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))]

相关问题 更多 >

    热门问题