Zoeken…


Invoering

In dit onderwerp kunnen Spark-gebruikers verschillende configuraties van Spark SQL vinden, het meest gebruikte onderdeel van het Apache Spark-framework.

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.



Modified text is an extract of the original Stack Overflow Documentation
Licentie onder CC BY-SA 3.0
Niet aangesloten bij Stack Overflow