2017-12-26 8 views
0

Ich habe 2 RDDs.Schlüssel zusammenpassen und 2 RDDs in pyspark ohne Datenrahmen verbinden

RDD 1: 
[['1', 'user1', 'Name1'], 
['2', 'user4', 'Name2']] 

RDD 2: 
[['5', '1a', '3', '99', 'g1'], 
['11', '2b', '1', '99', 'g2'], 
['12', '3c', '2', '99', 'g3']] 

Ich habe das über 2 RDD des mit dem ersten Feld in RDD 1 (1,2) usw. mit dem dritten Feld in RDD2 (3,1,2) usw. zu verbinden und zu neuer Ausgabe passender Zeilen geschrieben bekommen RDD nur, wenn es in beiden verfügbar ist. Ich weiß, dass eine Join-Operation ausgeführt werden kann. aber nicht sicher wie.

Required output 
[['1','Name1'], 
['2','Name2']] 

Wie geht das weiter? Gibt es eine Möglichkeit, dies ohne Dataframes zu tun?

Die Antworten in einer ähnlichen Frage haben mir nicht geholfen, eine ideale Lösung zu finden. Also musste ich die Abfrage erneut posten.

+1

Mögliches Duplikat von [pyspark join rdds durch einen bestimmten Schlüssel] (https://stackoverflow.com/questions/42821955/pyspark-join-rrds-by-a-specific-key) – philantrovert

Antwort

3

Sie können RDDs auch beitreten. Dieser Code wird Ihnen genau das geben, was Sie wollen.

tuple_rdd1 = rdd1.map(lambda x: (x(0), x(2))) 
tuple_rdd2 = rdd1.map(lambda x: (x(2), 0))) 
result = tuple_rdd1.join(tuple_rdd2).map(lambda x: [x[0], x[1][0] ]) 

Die erste Zeile wählt den Schlüssel und den Namen in rdd1. Zeile 2 wählt die dritte Spalte von rdd2 und die letzte Zeile verbindet die beiden und bringt das Ergebnis in das gewünschte Format.

+0

Vielen Dank. Dies hat das Problem gelöst. Der Schlüssel ist 0 in tuple_rdd2 ​​= rdd1.map (Lambda x: (x (2), 0))). Ich habe einen Index außerhalb der Reichweite bekommen und diese Lösung hat es gelöst. –

Verwandte Themen