2016-03-29 10 views
0
num_of_words = (doc_title,num) #number of words in a document 
lines = (doc_title,word,num_of_occurrences) #number of occurrences of a specific word in a document 

produzieren Als ich lines.join genannt (num_of_words), erwartete ich, wie etwas zu bekommen:() in pyspark kommen nicht die erwarteten Ergebnisse

(doc_title,(word,num_of_occurrences,num)) 

aber ich habe statt:

(doc_title,(word,num)) 

und num_of_occurrences wurde weggelassen. Was habe ich hier falsch gemacht? Wie soll ich diesen beiden RDDs beitreten, um das Ergebnis zu bekommen, das ich erwarte?

+2

Was ist ein reproduzierbares Beispiel? –

Antwort

1

Im API docs von Zündfunken für den join Methode:

join (andere, numPartitions = None)

Return ein RDD alle Paare von Elementen mit passenden Schlüssel in sich selbst und anderen enthalten.

Jedes Paar von Elementen wird als ein (k, (v1, v2)) Tupel zurückgegeben, wobei (k, v1) in Selbst und (k, v2) in anderen ist.

Die Methode join kann also nur paarweise verwendet werden (oder gibt Ihnen nur ein Ergebnis des beschriebenen Formulars zurück).

Ein Weg, dies zu überwinden, wäre Tupel von (doc_title, (word, num_occurrences)) anstelle von (doc_title, word, num_occurrences) zu haben. Arbeitsbeispiel:

num_of_words = sc.parallelize([("harry potter", 4242)]) 
lines = sc.parallelize([("harry potter", ("wand", 100))]) 
result = lines.join(num_of_words) 
print result.collect() 
# [('harry potter', (('wand', 100), 4242))] 

(Beachten Sie, dass sc.parallelize nur eine lokale Python-Sammlung in einer Spark RDD verwandelt, und das sammeln() tut genau das Gegenteil)

Verwandte Themen