Suche…


Einführung

In diesem Thema finden Spark-Benutzer verschiedene Konfigurationen von Spark SQL, der am häufigsten verwendeten Komponente von Apache Spark-Framework.

Spark-SQL-Shuffle-Partitionen steuern

In Apache Spark werden beim cogroup von Shuffle-Operationen wie join und cogroup viele Daten über das Netzwerk übertragen. Um die Anzahl der Partitionen zu steuern, über die der Shuffle-Vorgang stattfindet, können Sie nun die in Spark SQL angegebenen Konfigurationen steuern. Diese Konfiguration ist wie folgt:

spark.sql.shuffle.partitions

Mit dieser Konfiguration können wir die Anzahl der Partitionen von Shuffle-Vorgängen steuern. Der Standardwert ist 200 . 200 Partitionen machen jedoch keinen Sinn, wenn wir Dateien mit wenigen GB (s) haben. Daher sollten wir sie entsprechend der Datenmenge ändern, die wir über Spark SQL verarbeiten müssen. Wie folgt:

In diesem Szenario haben wir zwei Tabellen, in denen sich employee und department . Beide Tabellen enthalten nur wenige Datensätze, aber wir müssen ihnen beitreten, um die Abteilung jedes Angestellten kennenzulernen. Also fügen wir sie mit Spark-Datenrahmen wie folgt hinzu:

val conf = new SparkConf().setAppName("sample").setMaster("local")
val sc = new SparkContext(conf)

val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")

employeeDF.join(departmentDF, "employeeName").show()

Die Anzahl der Partitionen, die während des Joins erstellt werden, beträgt standardmäßig 200, was für diese Menge an Daten natürlich zu viel ist.

Ändern Sie also diesen Wert, um die Anzahl der Shuffle-Vorgänge zu reduzieren.

val conf = new SparkConf().setAppName("sample").setMaster("local").set("spark.sql.shuffle.partitions", 2)
val sc = new SparkContext(conf)

val employee = sc.parallelize(List("Bob", "Alice")).toDF("name")
val department = sc.parallelize(List(("Bob", "Accounts"), ("Alice", "Sales"))).toDF("name", "department")

employeeDF.join(departmentDF, "employeeName").show()

Jetzt wird die Anzahl der Shuffle-Partitionen auf nur noch 2 reduziert, was nicht nur die Anzahl der Shuffling-Vorgänge verringert, sondern auch die Zeit, die für das Hinzufügen der DataFrames von 0.878505 s auf 0.077847 s .

Konfigurieren Sie daher immer die Anzahl der Partitionen für Shuffle-Vorgänge entsprechend den verarbeiteten Daten.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow