[英]Add a list of values to each row in a PySpark dataframe
我有一個 PySpark 數據框,我們假設它如下所示:
df = spark.createDataFrame([(10,11,12,13), (20,21,22,23), (30,31,32,33)],['var1', 'var2', 'var3', 'var4'])
df.show()
>
|---------------------|------------------|---------------------|------------------|
| var1 | var2 | var3 | var4 |
|---------------------|------------------|---------------------|------------------|
| 10 | 11 | 12 | 13 |
|---------------------|------------------|---------------------|------------------|
| 20 | 21 | 22 | 23 |
|---------------------|------------------|---------------------|------------------|
| 30 | 31 | 32 | 33 |
|---------------------|------------------|---------------------|------------------|
我試圖從這些行中的每一行中減去一個值列表。 假設列表是 [1,1,2,2]。 此操作的預期結果是:
|---------------------|------------------|---------------------|------------------|
| var1 | var2 | var3 | var4 |
|---------------------|------------------|---------------------|------------------|
| 9 | 10 | 10 | 11 |
|---------------------|------------------|---------------------|------------------|
| 19 | 20 | 20 | 21 |
|---------------------|------------------|---------------------|------------------|
| 29 | 30 | 30 | 31 |
|---------------------|------------------|---------------------|------------------|
我想將此中間數據框中的每一行與另一個列表 [2,1,1,3] 相乘以創建
|---------------------|------------------|---------------------|------------------|
| var1 | var2 | var3 | var4 |
|---------------------|------------------|---------------------|------------------|
| 18 | 10 | 10 | 22 |
|---------------------|------------------|---------------------|------------------|
| 38 | 20 | 20 | 42 |
|---------------------|------------------|---------------------|------------------|
| 58 | 30 | 30 | 62 |
|---------------------|------------------|---------------------|------------------|
我是 PySpark 的新手,無法找到實現此目的的方法。 任何建議,將不勝感激!
最簡單的方法是:
import pyspark.sql.functions as F
for column, sub, mul in zip(df.columns, [1,1,2,2], [2,1,1,3]):
df = df.withColumn(column, (F.col(column) - sub) * mul)
df.show()
"""
+----+----+----+----+
|var1|var2|var3|var4|
+----+----+----+----+
| 18| 10| 10| 33|
| 38| 20| 20| 63|
| 58| 30| 30| 93|
+----+----+----+----+
"""
您也可以拆分操作,並保存到不同數據幀的中間變量。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.