0
votes

Pourquoi «avec Column» prend-il si longtemps dans Pyspark?

J'ai un Dataframe de Pyspark contenant 1000 colonnes et 10 000 enregistrements (rangées). Je dois créer 2000 plus de colonnes, en effectuant un certain calcul sur les colonnes existantes.

df #pyspark dataframe contaning 1000 columns and 10,000 records
df = df.withColumn('C1001', ((df['C269'] * df['C285'])/df['C41'])) #existing column names range from C1 to C1000
df = df.withColumn('C1002', ((df['C4'] * df['C267'])/df['C146']))
df = df.withColumn('C1003', ((df['C87'] * df['C134'])/df['C238']))
.
.
.
df = df.withColumn('C3000', ((df['C365'] * df['C235'])/df['C321']))


0 commentaires

3 Réponses :


1
votes

Beaucoup de ce que vous faites est de créer un plan d'exécution. Spark est paresseux exécutant jusqu'à ce qu'il y ait une action qui le déclenche. Les 45 minutes que vous voyez sont probablement d'exécuter toutes les transformations que vous avez installées.

Si vous voulez voir combien de temps un single aveccolumn prend, alors déclencher une action comme DF.Count () ou quelque chose auparavant, puis effectuez une seule avec des colonnes et un autre df.compte () (pour déclencher une autre action).

Regardez plus dans le plan d'exécution, des transformations et des actions de Pyspark.


2 commentaires

Des suggestions sur la manière d'améliorer les horaires de ces transformations?


Vous pouvez essayer d'assainir des actions ici et là pour conserver la complexité du plan d'exécution, cela peut aider. Si vous avez la possibilité d'augmenter votre cluster (augmenter plus de nœuds de nœuds ou de cœurs CPU) et augmentez le nombre d'exécutants, puis repartitionnez vos données afin que vous puissiez obtenir un traitement plus parallèle.



1
votes

sans être trop spécifique

  • et en regardant les observations de la 1ère réponse
    • et sachant que les plans d'exécution pour de nombreuses colonnes DF, alias «très larges données» sont coûteuses à calculer
      • Un passage au traitement de la RDD pourrait bien être le chemin à prendre.

0 commentaires

0
votes

fais cela en une seule ligne plutôt que de le faire un par un xxx


0 commentaires