2016-11-30 3 views
-2

Ich muss eine rdd mit zwei Reihen, inot eine rdd mit einer Reihe umwandeln. Beispiel:Erzeuge eine Reihe von vielen Reihen in eine RDD

rdd1=a 
    b 

ich brauche:

rdd2=(a,b) 

Wie kann ich diesen Schritt in pyspark? Die Frage könnte dumm sein, aber ich bin neu in Funken. "UPDATE" Dies ist zur Durchführung von Cartesian zwischen Rdd2 und Rdd3, beginnend von Rdd1. Wie:

rdd3:(k,l) 
    (c,g) 
    (f,x) 

Ich möchte diese Ausgabe:

rddOut:[(a,b),(k,l)] 
     [(a,b),(c,g)] 
     [(a,b),(f,x)] 

Vielen Dank im Voraus

Antwort

-1

Können Sie ein wenig mehr auf Ihre Notwendigkeit zu erklären? Eine RDD mit einer einzelnen Zeile zu haben, ist keine gute Idee, da Sie jegliche Parallelität verlieren.

Wenn Sie die Daten per Schlüssel sammeln möchten, können Sie die RDD in eine RDD von Paaren konvertieren (Schlüssel und Wert). Dann können Sie reduceByKey ausführen, um alles mit dem Schlüssel zu einer Liste zu sammeln, indem Sie einfach die reduce-Funktion als Listenverkettung verwenden.

+0

Das Problem ist, dass ich eine Maßnahme Abstand zwischen zwei identischen rdds (eine kartesische zwischen den beiden) durchführen muss, aber das Ergebnis ist zu groß, weil ich mit großen Datenmengen arbeite. Also die Idee war, die erste Zeile von rdd1 zu nehmen, mit allen rdd2 Cartesian durchzuführen (das ist identisch mit rdd1) und dann eine Ausgabedatei auszugeben. Entferne die erste Zeile von rdd1, nimm die neue zuerst, führe cartesian mit rdd2 aus und erzeuge eine zweite Datei usw. –

-1

Wenn das Verständnis für Ihre Frage korrekt ist, erhalten Sie mit der flatMap die erforderliche Ausgabe.

0

Update mein anwser:

initRDD = sc.parallelize(list('aeiou')).map(lambda x: (x, ord(x))).collect() 

ssc = StreamingContext(sc, batchDuration=3) 

lines = ssc.socketTextStream('localhost', 9999) 
items = lines.flatMap(lambda x: x.split()) 
counts = items.countByValue().map(lambda x: ([x] + initRDD)) 

Es sieht aus wie Broadcast statt kartesischer.

+0

Nicht richtig, ich habe meine Frage aktualisiert –

Verwandte Themen