2017-05-12 39 views
1

在pyspark,考慮兩個RDDS,如:合併兩個RDD密鑰是不一樣的,但相關的

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

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

其中RDD1集是二元語法的元組和計數,rdd2是相應的單元和元組的元組, 我想要有一個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)但在這種情況下,它是不是在某種意義上它們是相關的正確方法,因爲鍵是不同的,但

+0

您是否使用Python或Scala呢?你標記了python,但你的代碼是scala? – Psidom

+0

我正在使用python,這些示例只是以元組列表的形式顯示rdd。我不知道scala! – Elm662

回答

1

你可以這樣做;拆分兩字 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))] 
+0

有什麼辦法可以保持順序,就像在第二個元組中,('name',10)和('my',6)的順序與tworam不一樣'我的名字'我想要有東西(''name',5),('my',6),('name',10),('is',5) 'name',10))]' – Elm662

相關問題