0

Ich habe eine 5-Knoten-Cluster.Ich lade eine 100k CSV-Datei auf einen Datenrahmen mit pyspark und einige Etl-Operationen und das Schreiben der Ausgabe in eine Parkett-Datei. Wenn ich den Datenrahmen lade, kann ich den Datensatz gleichmäßig auf alle Executoren verteilen, so dass jeder Executor 20k Datensätze verarbeitet.pyspark Split Last gleichmäßig über alle Executoren

+0

Sie verwenden 'repartition (5)'. – philantrovert

Antwort

0

Stellen Sie nach Möglichkeit sicher, dass die Eingabedaten in kleinere Dateien aufgeteilt werden. so liest und verarbeitet jeder Executor eine einzelne Datei.

Im Fall, dass Sie die Eingabedateien nicht ändern können, können Sie df.repartition(5) nennen kann, aber denken Sie daran, dass es eine teure Shuffle Betrieb verursachen können

+0

Das Hinzufügen der Neupartitionierung dauert länger als Sie gesagt haben.Ich dachte, wenn die Daten gleichmäßig über alle 5 Knoten verteilt sind, wird der Prozess schneller beendet. df = sqlContext.read.format ('com.databricks.spark.csv'). load ("/ dwo_poc/rows.csv") dz = df.repartition (5) dz.show (100) – srini

+0

So ist es vorgeschlagen, nicht neu zu partitionieren.Es scheint, als wäre die Kosten für Shuffle teurer als der Vorteil der Parallelität und gleichmäßig verteilt die Last.Korrigieren Sie mich, wenn mein Verständnis falsch ist. – srini

+0

Es gibt keine Antwort, die alle passt. Am besten versuchen Sie herauszufinden, was am besten zu Ihrer Arbeitslast passt – lev

Verwandte Themen