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']))
3 Réponses :
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. P>
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). p>
Regardez plus dans le plan d'exécution, des transformations et des actions de Pyspark. P>
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.
sans être trop spécifique p>