apache-spark
Configuratie: Apache Spark SQL
Zoeken…
Invoering
Besturing van Spark SQL Shuffle-partities
In Apache Spark worden tijdens shuffle-bewerkingen zoals join
en cogroup
veel gegevens overgedragen via het netwerk. Nu kan het aantal partities waarover shuffle gebeurt worden geregeld door configuraties in Spark SQL. Die configuratie is als volgt:
spark.sql.shuffle.partitions
Met deze configuratie kunnen we het aantal partities van shuffle-bewerkingen regelen. Standaard is de waarde 200
. Maar 200 partities hebben geen zin als we bestanden van enkele GB (s) hebben. We moeten ze dus aanpassen aan de hoeveelheid gegevens die we via Spark SQL moeten verwerken. Als volgt:
In dit scenario hebben we twee tabellen die moeten worden toegevoegd aan employee
en department
. Beide tabellen bevatten slechts enkele records, maar we moeten eraan meedoen om de afdeling van elke werknemer te leren kennen. Dus we sluiten ons bij hen aan met Spark DataFrames als volgt:
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()
Nu is het aantal partities dat wordt gemaakt tijdens het doen van join standaard 200, wat natuurlijk te veel is voor zoveel gegevens.
Laten we deze waarde dus wijzigen zodat we het aantal shuffle-bewerkingen kunnen verminderen.
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()
Nu is het aantal shuffle-partities teruggebracht tot slechts 2, wat niet alleen het aantal shuffling-bewerkingen vermindert, maar ook de tijd die nodig is om de DataFrames aan te sluiten van 0.878505 s
tot 0.077847 s
.
Configureer dus altijd het aantal partities voor shuffle-bewerkingen op basis van de gegevens die worden verwerkt.