2016-04-10 20 views
0

Performing sammeln auf einer RDD gab mir eine Liste. Ich iteriert es um die Struktur zu drucken, mit dem Code,Kombinieren von Listen innerhalb Werte in pyspark

for entry in ratings_and_users.collect(): 
     print(entry) 

Der Ausgang ist,

(b'"20599"', ([7.0, b'"349802972X"'], ['bamberg, franken, germany', 'NULL'])) 
(b'"120675"', ([0.0, b'"0972189408"'], ['crescent city, california, usa', 45])) 
(b'"166487"', ([6.0, b'"8422626993"'], ['santander, n/a, spain', 103])) 
(b'"166487"', ([7.0, b'"8440639228"'], ['santander, n/a, spain', 103])) 

In pyspark, ich brauche einen Lambda zu schreiben, verbinden alle Listen in den Wert in eine einzelne Liste. Zum Beispiel ist in der obigen Ausgabe jede Zeile ein Schlüsselwertpaar, der Schlüssel b'"166487"' hat eine Liste als Wert ([7.0, b'"8440639228"'], ['santander, n/a, spain', 103]). Der Wert enthält mehrere Listen, wie kann ich sie in einer einzigen Liste beitreten vor der Durchführung collect auf der RDD

Erforderliche Ausgabestruktur:

(b'"166487"', ([7.0, b'"8440639228"', 'santander, n/a, spain', 103])) 

Antwort

0

das Problem war ich jedes Element betrachtet aus dem Ergebnis der collect Operation als ein Schlüssel-Wert-Paar, sondern es ist eine Tuple mit Schlüssel als erster Eintrag und Wert, der zweite. Also habe ich dann die folgende lambda iteriert, und ich habe das Ergebnis erhalten.

def append_values_inside(key, value): 
    temp = [] 
    for v in value: 
     for entry in v: 
      temp.append(entry) 
    return (key, temp) 
for entry in ratings_and_users.map(lambda a: append_values_inside(a[0], a[1])).collect() : 
     print(entry) 

Endergebnis:

(b'"20599"', [7.0, b'"349802972X"', 'bamberg, franken, germany', 'NULL']) 
(b'"120675"', [0.0, b'"0972189408"', 'crescent city, california, usa', 45]) 
(b'"166487"', [6.0, b'"8422626993"', 'santander, n/a, spain', 103]) 
(b'"166487"', [7.0, b'"8440639228"', 'santander, n/a, spain', 103]) 
+1

Amh, können Sie diese Karte, bevor Sie ' –

+0

@AlbertoBonsanto Nizza Fang collect' ich diesen Fehler im Code behoben, aber vergessen, in SO zu aktualisieren – Mitty

Verwandte Themen