0

J'ai un cluster de 5 nœuds. Je charge un fichier csv de 100k dans une base de données en utilisant pyspark et en effectuant quelques opérations etl et en écrivant la sortie dans un fichier parquet. Lorsque je charge la trame de données, comment répartir uniformément l'ensemble de données sur tous les exécuteurs, de sorte que chaque exécuteur traite 20k enregistrements.pyspark répartir la charge uniformément sur tous les exécuteurs

+0

Vous pouvez utiliser 'la répartition (5)'. – philantrovert

Répondre

0

Si possible, assurez-vous que les données d'entrée sont divisées en fichiers plus petits. de cette façon chaque exécuteur va lire et traiter un seul fichier.

Dans le cas où vous ne pouvez pas modifier les fichiers d'entrée, vous pouvez appeler df.repartition(5), mais gardez à l'esprit que cela provoquera une opération de lecture aléatoire cher

+0

Ajout de repartition prend plus de temps que vous avez dit.Je pensais que si les données sont réparties également entre les 5 nœuds, le processus se terminera plus vite. df = sqlContext.read.format ('com.databricks.spark.csv'). load ("/ dwo_poc/rows.csv") dz = df.repartition (5) dz.show (100) – srini

+0

Alors c'est suggéré de ne pas repartitionner.Il semble que le coût de la shuffle est cher que le bénéfice du parallélisme et la répartition égale de la charge.Corriger moi si ma compréhension est fausse. – srini

+0

Il n'y a pas une seule réponse qui convient à tous. Le mieux est d'essayer de voir ce qui fonctionne le mieux pour votre charge de travail – lev