Pyspark: répartition vs partitionBy

Je suis en train de travailler à travers ces deux concepts dès maintenant et voudrais un peu de clarté. De travail par le biais de la ligne de commande, j'ai essayé d'identifier les différences et quand un développeur utilise répartition vs partitionBy.

Voici un exemple de code:

rdd = sc.parallelize([('a', 1), ('a', 2), ('b', 1), ('b', 3), ('c',1), ('ef',5)])
rdd1 = rdd.repartition(4)
rdd2 = rdd.partitionBy(4)

rdd1.glom().collect()
[[('b', 1), ('ef', 5)], [], [], [('a', 1), ('a', 2), ('b', 3), ('c', 1)]]

rdd2.glom().collect()
[[('a', 1), ('a', 2)], [], [('c', 1)], [('b', 1), ('b', 3), ('ef', 5)]]

J'ai pris un coup d'oeil à la mise en œuvre des deux, et la seule différence que j'ai remarqué pour la plupart, est que partitionBy peut prendre une fonction de partitionnement, ou à l'aide de la portable_hash par défaut. Ainsi, dans partitionBy, tous les mêmes clés doivent être dans la même partition. Dans la répartition, je m'attends à ce que les valeurs soient réparties plus uniformément sur les partitions, mais ce n'est pas le cas.

Compte tenu de cela, pourquoi serait-on jamais utiliser de répartition? Je suppose que le seul moment où je pouvais le voir utilisé est si je ne travaille pas avec PairRDD, ou j'ai des données à grande inclinaison?

Il y a une chose que je suis absent, ou quelqu'un pourrait jeter de la lumière à partir d'un angle différent pour moi?

OriginalL'auteur Joe Widen | 2015-11-20