我有一個類似于以下示例的大型資料集:
| ID | 代碼 | 學習 | 數量 | COL_NAME |
|---|---|---|---|---|
| 111 | 5611 | A B C D | 56.17 | ID |
| 211 | 5411 | GFED | 451.1 | 數量 |
| 311 | 3212 | YTRA | 687.3 | 學習 |
我想填充存盤在 col_name 中的列(COL_VAL)中的列的值,如下所示:
| ID | 代碼 | 學習 | 數量 | COL_NAME | COL_VALUE |
|---|---|---|---|---|---|
| 111 | 5611 | A B C D | 56.17 | ID | 111 |
| 211 | 5411 | GFED | 451.1 | 數量 | 451.1 |
| 311 | 3212 | YTRA | 687.3 | 學習 | YTRA |
我正在使用回圈和 .collect() 來填充值,但這需要很多時間。想知道對大型資料集執行相同操作的有效方法。
uj5u.com熱心網友回復:
您可以使用它when來實作這一點。
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()
輸出
--- ---- ----- ------ -------- ---------
| 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|
--- ---- ----- ------ -------- ---------
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/364792.html
