Wie kann ich "for" - Schleife in der Funke mit pyspark

Traf ich ein problem während der Verwendung von spark-mit Python ist3 in meinem Projekt. In einer Schlüssel-Wert-paar, wie ('1','+1 2,3'), die Teil "2,3" war, die Inhalte, die ich abklären wollte. Also schrieb ich den folgenden code:
(Angenommen, diese Schlüssel-Wert-paar gespeichert wurde, in einem RDD genannt p_list)


def add_label(x):   
    label=x[1].split()[0]  
    value=x[1].split()[1].split(",")  
    for i in value:     
        return (i,label)  
p_list=p_list.map(add_label)

Nach tun, ich konnte nur das Ergebnis bekommen: ('2','+1') sein und es sollte ('2','+1') und ('3','+1'). Es scheint so, dass die "for" - Schleife in der Karte-Einsatz habe einmal. Wie kann ich lassen Sie es mehrere Male? Oder gibt es irgendeine andere Möglichkeit, die ich verwenden können, um die Implementierung einer solchen Funktion wie "for" - Schleife im map-Betrieb oder Betrieb reduzieren?

Möchte ich erwähnen, dass das, was ich wirklich befassen sich mit einem großen dataset. Also ich habe mithilfe von AWS cluster und implementieren Sie die Schleife mit der Parallelisierung. Die slave-Knoten im cluster scheinen nicht zu verstehen, die Schleife. Wie kann ich Sie wissen lassen, dass mit Funke RDD-Funktion? Oder wie kann eine solche loop-Betrieb in einer anderen pipeline-Art und Weise (das ist eine der wichtigsten design-der Funke RDD)?

Ich bin versucht zu entfernen, die Funke-tags von dieser Frage, denn nichts daran ist wirklich Funken-bestimmte andere als die RDD.map Funktion
Sorry für die nicht zu erwähnen die details von meinem Projekt. Es ist wirklich ein Funke Anwendung. Das problem oben ist nur ein Auszug der wichtigsten problem, das ich traf. Es werden eine Menge von Schlüssel-Wert-Paare, wie ('1','+1 2,3'), gespeichert in rdd. Ich muss vergleichen, das Etikett und die folgenden untergeordneten Knoten, und kehren jedes (Kind-Knoten, label) für alle Schlüssel-Wert-Paare. Die ganze operation ist RDD.anzeigen().filter().reduceByKey() und andere. Es sollte getan werden, auf AWS mit spark-cluster.
haben Sie versucht rdd.foreach() ?
rdd.foreach() wendet eine Funktion auf alle Elemente, die in der RDD. Ich kann auch anwenden einer Funktion auf jedes element mit rdd.map() oder rdd.verringern(). Keinen Unterschied? Eigentlich habe ich versucht, eine for-Schleife in rdd.foreach(), aber es immer noch hat nur einmal für jedes element. Ich brauche ein Vorgang mehrere Male für jedes element, das nicht nur einmal.
Ich lief diese auf einem einzelnen computer und es funktionierte gut. Aber bei mir lief es im pseudo-Modus oder vollständig verteilten Modus(wie AWS), das Ergebnis zeigte, dass diese operation wurde nur einmal gemacht. Warum nicht die for-Schleife arbeiten in verteilten computing?

InformationsquelleAutor Linghao | 2016-11-18

Schreibe einen Kommentar