簡體   English   中英

將值列表添加到 PySpark 數據框中的每一行

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM