apache-spark
Configuración: Apache Spark SQL
Buscar..
Introducción
Control de particiones aleatorias de Spark SQL
En Apache Spark, mientras se realizan operaciones aleatorias como join
y cogroup
muchos datos, se transfieren a través de la red. Ahora, para controlar el número de particiones sobre las cuales se produce el orden aleatorio, se puede controlar mediante configuraciones dadas en Spark SQL. Esa configuración es la siguiente:
spark.sql.shuffle.partitions
Usando esta configuración podemos controlar el número de particiones de las operaciones aleatorias. Por defecto, su valor es 200
. Pero, 200 particiones no tiene ningún sentido si tenemos archivos de pocos GB (s). Por lo tanto, debemos cambiarlos de acuerdo con la cantidad de datos que necesitamos procesar a través de Spark SQL. Me gusta como sigue:
En este escenario tenemos dos tablas para unir employee
y department
. Ambas tablas solo contienen pocos registros, pero necesitamos unirlos para conocer el departamento de cada empleado. Entonces, nos unimos a ellos usando Spark DataFrames como este:
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()
Ahora, la cantidad de particiones que se crean mientras se realiza la unión son 200 por defecto, lo que por supuesto es demasiado para esta cantidad de datos.
Por lo tanto, cambiemos este valor para que podamos reducir el número de operaciones aleatorias.
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()
Ahora, el número de particiones aleatorias se reduce a solo 2, lo que no solo reducirá el número de operaciones de orden aleatorio, sino que también reducirá el tiempo necesario para unir los marcos de 0.878505 s
de 0.878505 s
0.077847 s
.
Por lo tanto, siempre configure el número de particiones para las operaciones aleatorias de acuerdo con los datos que se procesan.