Je comprends que la fonction partitionBy
partitionne mes données. Si j'utilise rdd.partitionBy(100)
il partitionnera mes données par clé en 100 parties. c'est-à-dire que les données associées à des clés similaires seront regroupées
Il n'y a pas de réponse simple ici. Tout dépend de la quantité de données et des ressources disponibles. Trop grand ou un nombre trop faible de partitions dégradera les performances.
Certaines ressources prétendent que le nombre de partitions devrait être environ deux fois plus grand que le nombre de cœurs disponibles. D'un autre côté, une seule partition ne devrait généralement pas contenir plus de 128 Mo et un seul bloc aléatoire ne peut pas dépasser 2 Go (voir SPARK-6235 ).
Enfin, vous devez corriger les éventuels biais de données. Si certaines clés sont surreprésentées dans votre ensemble de données, cela peut entraîner une utilisation des ressources sous-optimale et une défaillance potentielle.
Non, ou du moins pas directement. Vous pouvez utiliser la méthode keyBy
pour convertir RDD au format requis. De plus, tout Python objet peut être traité comme une paire clé-valeur tant qu'il met en œuvre les méthodes requises qui le rendent se comporter comme un Iterable
de longueur égale à 2. Voir Comment déterminer si l'objet est une paire clé-valeur valide dans PySpark
Tuple
d'entiers l'est.Pour citer glossaire Python :
Un objet est hachable s'il a une valeur de hachage qui ne change jamais pendant sa durée de vie (il a besoin d'une méthode
__hash__()
), et peut être comparée à d'autres objets (il a besoin d'une méthode__eq__()
) . Les objets hachables qui se comparent égaux doivent avoir la même valeur de hachage.