>>> rdd = sc.parallelize(range(10), 2) >>> rdd.glom().collect() [[0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] >>> rdd.repartition(3).glom().collect() [[], [0, 1, 2, 3, 4], [5, 6, 7, 8, 9]] >>> The first partition is empty? Why? I really appreciate you telling me the reasons.
3 Réponses :
Cela se produit parce que Spark ne mélange pas des éléments individuels mais plutôt des blocs de données - avec une taille de lot minimale égale à 10 .
Donc, si vous avez moins d'éléments que cela par partition, Spark ne séparera pas le contenu des partitions.
Ceci peut être expliqué en jetant simplement un œil au fonctionnement de la fonction de répartition.
La raison en est que l'appel de Le Voir aussi: cette question et cette question . J'espère que cela vous aidera. df.repartition (COL, numPartitions = k)
créera une trame de données avec des partitions k
en utilisant un partitionné basé sur le hachage. Pyspark parcourra chaque ligne et appliquera la fonction pour déterminer où se terminera l'élément de la ligne courante: partition_the_row_belongs_to = hash(COL) % k
k
dans ce cas est utilisé pour mapper les lignes dans un espace constitué de k partitions. Comme vous pouvez le voir, il y a des moments où les fonctions de hachage se heurtent. Parfois, certaines partitions seront vides tandis que d'autres auront trop d'éléments. Cela peut être dû aux conclusions de la carte de hachage ou à la fonction de hachage. Quoi qu'il en soit, la raison de ce que vous voyez est que la répartition a créé 3 partitions comme vous l'avez demandé, cela ne vous promet rien sur l'équilibrage des partitions ou le fait que toutes les partitions soient non vides. Si vous souhaitez avoir plus de contrôle sur l'apparence des partitions résultantes, consultez partition par .
Il convient de noter que, comme Spark consiste uniquement à fonctionner à grande échelle, il est peu probable que ce scénario s'inquiète. Le plus proche que vous pouvez obtenir est des données biaisées. range donnera un partitionnement initial différent de la repartition qui utilisera le hachage. Le commentaire sur la taille du lot est également valide, mais moins pertinent en pratique.
Craignez-vous que la première partition soit vide ou qu'une partition soit vide?