Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/svn/5.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
Pyspark 从同一数据帧的另一列在数据帧中添加列_Pyspark_Spark Dataframe - Fatal编程技术网

Pyspark 从同一数据帧的另一列在数据帧中添加列

Pyspark 从同一数据帧的另一列在数据帧中添加列,pyspark,spark-dataframe,Pyspark,Spark Dataframe,我有一个Pyspark数据帧df,如下所示: +---+----+---+ | id|name| c| +---+----+---+ | 1| a| 5| | 2| b| 4| | 3| c| 2| | 4| d| 3| | 5| e| 1| +---+----+---+ 我想添加一列match_name,该列的值来自name列,其中id==c 是否可以使用函数withColumn() 目前,我必须创建两个数据帧,然后执行连接。 这在大数据集上效率很低

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

+---+----+---+
| id|name|  c|
+---+----+---+
|  1|   a|  5|
|  2|   b|  4|
|  3|   c|  2|
|  4|   d|  3|
|  5|   e|  1|
+---+----+---+
我想添加一列
match_name
,该列的值来自
name
列,其中
id==c

是否可以使用函数
withColumn()

目前,我必须创建两个数据帧,然后执行连接。 这在大数据集上效率很低

预期产出:

+---+----+---+----------+
| id|name|  c|match_name|
+---+----+---+----------+
|  1|   a|  5|         e|
|  2|   b|  4|         d|
|  3|   c|  2|         b|
|  4|   d|  3|         c|
|  5|   e|  1|         a|
+---+----+---+----------+
是的,这是可能的,因为:

如果不满足条件,您也可以使用提供不同的值。

是的,可以使用:


如果不满足条件,您也可以使用提供不同的值。

可能与
c
重复??原始的
match
列在哪里???
c
match
是否相同?我将其更改为简单无答案?可能与
c
重复??原始的
match
列在哪里???
c
match
是相同的,我将其更改为简单无答案?。。。快几秒钟(+1):)`从pyspark.sql导入函数为func df=spark.createDataFrame([(1,'a',5),(2,'b',4),(3,'c',2),(4,'d',3),(5,'e',1)],['id',name',c'])condition=func.col(“id”)==func.col(“c”)result=df with column(“match_name”,func.when(condition,func.col(“name”))result.show()`先生,我想记下id为
3
的列的名称,并将其添加到id为
1
@JugrajSingh 1)的行中。请不要在注释中添加长代码片段-它们是不可读的2)当然可以,因为在这些(新)数据中,条件是不匹配的!我已经确认,您最初在您的帖子中提供的数据的解决方案确实如所示和预期……同意并表示歉意,但我的要求不同。它是用可能的匹配名称填充所有行,就像join一样。。。。快几秒钟(+1):)`从pyspark.sql导入函数为func df=spark.createDataFrame([(1,'a',5),(2,'b',4),(3,'c',2),(4,'d',3),(5,'e',1)],['id',name',c'])condition=func.col(“id”)==func.col(“c”)result=df with column(“match_name”,func.when(condition,func.col(“name”))result.show()`先生,我想记下id为
3
的列的名称,并将其添加到id为
1
@JugrajSingh 1)的行中。请不要在注释中添加长代码片段-它们是不可读的2)当然可以,因为在这些(新)数据中,条件是不匹配的!我已经确认,您最初在您的帖子中提供的数据的解决方案确实如所示和预期……同意并表示歉意,但我的要求不同。就像join一样,用可能的匹配名称填充所有行。
from pyspark.sql.functions import when, col

condition = col("id") == col("match")
result = df.withColumn("match_name", when(condition, col("name"))

result.show()

id name match match_name
1  a    3     null
2  b    2     b
3  c    5     null
4  d    4     d
5  e    1     null