apache-spark
Konfiguration: Apache Spark SQL
Sök…
Introduktion
Kontrollera Spark SQL Shuffle-partitioner
I Apache Spark när du gör blandningsoperationer som join
och cogroup
en hel del data över nätverket. För att kontrollera antalet partitioner över vilket shuffle händer kan styras med konfigurationer som ges i Spark SQL. Den konfigurationen är som följer:
spark.sql.shuffle.partitions
Med denna konfiguration kan vi styra antalet partitioner för blandningsoperationer. Som standard är dess värde 200
. Men 200 partitioner är inte vettigt om vi har filer på få GB (er). Så vi bör ändra dem beroende på hur mycket data vi behöver bearbeta via Spark SQL. Så här:
I det här scenariot har vi två tabeller som ska anslutas till employee
och department
. Båda tabellerna innehåller endast några poster, men vi måste gå med dem för att lära känna avdelningen för varje anställd. Så vi går med dem med hjälp av Spark DataFrames så här:
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 är antalet partitioner som skapas medan du går med 200 som standard vilket naturligtvis är för mycket för den här mängden data.
Så låter vi ändra detta värde så att vi kan minska antalet blandningsoperationer.
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 reduceras antalet blandningspartitioner till endast 2, vilket inte bara minskar antalet blandningsoperationer utan också minskar den tid det tar att gå med i DataFrames från 0.878505 s
till 0.077847 s
.
Så konfigurera alltid antalet partitioner för blandningsoperationer beroende på de data som behandlas.