Python Pyspark:将行值替换为具有相同名称的另一列
我有一个pyspark数据帧,如下所示,dfPython Pyspark:将行值替换为具有相同名称的另一列,python,pyspark,apache-spark-sql,Python,Pyspark,Apache Spark Sql,我有一个pyspark数据帧,如下所示,df | D1 | D2 | D3 |Out| | 2 | 4 | 5 |D2 | | 5 | 8 | 4 |D3 | | 3 | 7 | 8 |D1 | 我想用同一行中的行值替换“out”列的行值,并使用“out”列的行值的相同列名 我尝试了上面的代码,它可以获得结果,但当我试图保存到csv时,它不断显示错误“作业因……而中止”,因此我想问是否有其他方法也可以获得相同的结果。谢谢 当使用reduce从列名动态生成语句时,可以使用cha
| D1 | D2 | D3 |Out|
| 2 | 4 | 5 |D2 |
| 5 | 8 | 4 |D3 |
| 3 | 7 | 8 |D1 |
我想用同一行中的行值替换“out”列的行值,并使用“out”列的行值的相同列名
我尝试了上面的代码,它可以获得结果,但当我试图保存到csv时,它不断显示错误“作业因……而中止”,因此我想问是否有其他方法也可以获得相同的结果。谢谢 当使用
reduce
从列名动态生成语句时,可以使用chained:
from functools import reduce
import pyspark.sql.functions as F
df2 = df.withColumn(
'Result',
reduce(
lambda x, y: x.when(F.col('Out') == y, F.col(y)),
df.columns[:-1],
F
)
)
df2.show()
+---+---+---+---+------+
| D1| D2| D3|Out|Result|
+---+---+---+---+------+
| 2| 4| 5| D2| 4|
| 5| 8| 4| D3| 4|
| 3| 7| 8| D1| 3|
+---+---+---+---+------+
df_lag=df.rdd.map(lambda row: row + (row[row.Out],)).toDF(df.columns + ["Result"])
from functools import reduce
import pyspark.sql.functions as F
df2 = df.withColumn(
'Result',
reduce(
lambda x, y: x.when(F.col('Out') == y, F.col(y)),
df.columns[:-1],
F
)
)
df2.show()
+---+---+---+---+------+
| D1| D2| D3|Out|Result|
+---+---+---+---+------+
| 2| 4| 5| D2| 4|
| 5| 8| 4| D3| 4|
| 3| 7| 8| D1| 3|
+---+---+---+---+------+