apache-spark
Konfiguration: Apache Spark SQL
Suche…
Einführung
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.