apache-spark
Configuration: Apache Spark SQL
Recherche…
Introduction
Contrôle des partitions de lecture aléatoire Spark SQL
Dans Apache Spark, tout en effectuant des opérations de cogroup
aléatoire telles que la join
et le cogroup
nombreuses données sont transférées sur le réseau. Maintenant, pour contrôler le nombre de partitions sur lesquelles se produit la lecture aléatoire, vous pouvez les contrôler à l'aide de configurations données dans Spark SQL. Cette configuration est la suivante:
spark.sql.shuffle.partitions
En utilisant cette configuration, nous pouvons contrôler le nombre de partitions des opérations de lecture aléatoire. Par défaut, sa valeur est 200
. Mais 200 partitions n’a aucun sens si nous avons des fichiers de quelques Go. Nous devrions donc les modifier en fonction de la quantité de données à traiter via Spark SQL. Comme suit:
Dans ce scénario, nous avons deux tables à joindre employee
et department
. Les deux tables ne contiennent que peu d’enregistrements, mais nous devons les joindre pour connaître le service de chaque employé. Donc, nous les rejoignons en utilisant Spark DataFrames comme ceci:
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()
Maintenant, le nombre de partitions créées lors de la jointure est de 200 par défaut, ce qui est bien sûr trop pour cette quantité de données.
Changeons donc cette valeur pour réduire le nombre d'opérations de lecture aléatoire.
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()
Maintenant, le nombre de partitions shuffle est réduit à 2, ce qui réduit non seulement le nombre d'opérations de mélange mais réduit également le temps nécessaire pour joindre les DataFrames de 0.878505 s
à 0.077847 s
.
Configurez donc toujours le nombre de partitions pour les opérations de lecture aléatoire en fonction des données en cours de traitement.