Recherche…


Introduction

Dans cette rubrique, les utilisateurs Spark peuvent trouver différentes configurations de Spark SQL, composant le plus utilisé du framework Apache Spark.

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.



Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow