Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/318.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pyspark:将行值替换为具有相同名称的另一列_Python_Pyspark_Apache Spark Sql - Fatal编程技术网

Python Pyspark:将行值替换为具有相同名称的另一列

Python 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

我有一个pyspark数据帧,如下所示,df

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