Aynı veri çerçevesi içinde bir sütunda değer olarak depolanan sütun adlarını kullanarak veri getirme pyspark

0

Soru

Aşağıdaki örneğe benzer büyük bir veri kümem var :

KİMLİK kod çalışmak miktar KOL_ADI
111 5611 ABCD 56.17 KİMLİK
211 5411 GFED 451.1 miktar
311 3212 YTRA 687.3 çalışmak

Col_name'de depolanan sütunların değerlerini aşağıdaki gibi aynı veri çerçevesindeki bir sütunda(COL_VAL) doldurmak istiyorum :

KİMLİK kod çalışmak miktar KOL_ADI COL_VALUE
111 5611 ABCD 56.17 KİMLİK 111
211 5411 GFED 451.1 miktar 451.1
311 3212 YTRA 687.3 çalışmak YTRA

Bir döngü kullanıyorum ve .değerleri doldurmak için collect() ancak çok zaman alıyor. Büyük bir veri kümesi için aynı şeyi yapmanın etkili yollarını bilmek istiyorum.

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

En iyi cevabı

0

Kullanabilirsinizwhen bunu başarmak için.

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()

Çıktı

+---+----+-----+------+--------+---------+
| 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

Diğer dillerde

Bu sayfa diğer dillerde

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