0

Ich lese Spark: RDD operations und ich bin Ausführung:RDD Grundlagen über Partitionen

In [7]: lines = sc.textFile("data") 

In [8]: lines.getNumPartitions() 
Out[8]: 1000 

In [9]: lineLengths = lines.map(lambda s: len(s)) 

In [10]: lineLengths.getNumPartitions() 
Out[10]: 1000 

In [11]: len(lineLengths.collect()) 
Out[11]: 508524 

aber ich würde erwarten, dass meine Daten-Set in Teile aufgespalten wird, wie viele? Da die Anzahl der Partitionen, also 1000.

Dann würde die map() auf jeder Partition ausgeführt und ein lokales Ergebnis zurück (die dann reduziert werden soll), aber wenn dies der Fall ist, würde ich lineLenghts erwarten, die eine Liste ist von Zahlen, um Länge gleich zu den # Partitionen zu haben, was nicht der Fall ist.

Was fehlt mir?

Antwort

2

len(lineLengths.collect()) oder lineLengths.count() sagt Ihnen die Anzahl der Zeilen in Ihrer RDD. lineLengths.getNumPartitions(), wie Sie angegeben haben, ist die Anzahl der Partitionen, über die Ihre RDD verteilt ist. Jede Partition der RDD enthält viele Zeilen des Datenrahmens.