Extraire des données à l'aide de noms de colonne stockés sous forme de valeurs dans une colonne à l'intérieur de la même dataframe pyspark

0

La question

J'ai un grand jeu de données similaire à l'exemple ci-dessous :

ID CODE ÉTUDE MONTANT NOM_COL
111 5611 ABCD De 56,17 ID
211 5411 GFED 451.1 MONTANT
311 3212 YTRA 687.3 ÉTUDE

Je veux remplir les valeurs des colonnes stockées dans nom_col dans une colonne(COL_VAL) au sein de la même dataframe comme ci-dessous :

ID CODE ÉTUDE MONTANT NOM_COL COL_VALUE
111 5611 ABCD De 56,17 ID 111
211 5411 GFED 451.1 MONTANT 451.1
311 3212 YTRA 687.3 ÉTUDE YTRA

Je suis l'aide d'une boucle et .collect() pour remplir les valeurs, mais il prend beaucoup de temps. Voudrais savoir efficace façons de faire de même pour un grand jeu de données.

apache-spark loops pyspark python
2021-11-23 17:20:27
1

La meilleure réponse

0

Vous pouvez utiliser when pour atteindre cet objectif.

from pyspark.sql import functions as F

data = [(111, 5611, "ABCD", 56.17, "ID",),
(211, 5411, "GFED", 451.1, "AMOUNT",),
(311, 3212, "YTRA", 687.3, "STUDY",),]

df = spark.createDataFrame(data, ("ID", "CODE", "STUDY", "AMOUNT","COL_NAME"))

def derive_column_value():
    condition = F
    for possible_value in df.columns:
        condition = condition.when(F.col("COL_NAME") == possible_value, F.col(possible_value))
    return condition

df.withColumn("COL_VALUE", derive_column_value()).show()

Sortie

+---+----+-----+------+--------+---------+
| ID|CODE|STUDY|AMOUNT|COL_NAME|COL_VALUE|
+---+----+-----+------+--------+---------+
|111|5611| ABCD| 56.17|      ID|      111|
|211|5411| GFED| 451.1|  AMOUNT|    451.1|
|311|3212| YTRA| 687.3|   STUDY|     YTRA|
+---+----+-----+------+--------+---------+
2021-11-23 17:41:06

Dans d'autres langues

Cette page est dans d'autres langues

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Türk
..................................................................................................................
Česk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................