Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/79.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
Sql PySpark-如何使用join更新数据帧?_Sql_Apache Spark_Pyspark - Fatal编程技术网

Sql PySpark-如何使用join更新数据帧?

Sql PySpark-如何使用join更新数据帧?,sql,apache-spark,pyspark,Sql,Apache Spark,Pyspark,我有一个数据帧a: id,value 1,11 2,22 3,33 和另一个数据帧b: id,value 1,123 3,345 我想根据列“id”使用来自b的所有匹配值更新数据帧a 最终数据帧“c”将是: id,value 1,123 2,22 3,345 如何使用datafame连接或其他方法实现这一点 尝试: a.join(b, a.id == b.id, "inner").drop(a.value) 提供不需要的输出: +---+---+-----+ | id| id|value

我有一个数据帧a:

id,value
1,11
2,22
3,33
和另一个数据帧b:

id,value
1,123
3,345
我想根据列“id”使用来自b的所有匹配值更新数据帧a

最终数据帧“c”将是:

id,value
1,123
2,22
3,345
如何使用datafame连接或其他方法实现这一点

尝试:

a.join(b, a.id == b.id, "inner").drop(a.value)
提供不需要的输出:

+---+---+-----+
| id| id|value|
+---+---+-----+
|  1|  1|  123|
|  3|  3|  345|
+---+---+-----+

谢谢。

我认为没有更新功能。但这应该是可行的:

import pyspark.sql.functions as F

df1.join(df2, df1.id == df2.id, "left_outer") \
   .select(df1.id, df2.id, F.when(df2.value.isNull(), df1.value).otherwise(df2.value).alias("value")))

我认为没有更新功能。但这应该是可行的:

import pyspark.sql.functions as F

df1.join(df2, df1.id == df2.id, "left_outer") \
   .select(df1.id, df2.id, F.when(df2.value.isNull(), df1.value).otherwise(df2.value).alias("value")))

查看逻辑即可得出结论,但获取错误raise TypeErrorColumn不是带SELECT的iterableReplaced列查看逻辑即可得出结论,但获取错误raise TypeErrorColumn不是带SELECT的iterableReplaced列它将强制转换您,但会得到结果。scala>dfd.joindf.selectid,Seqid,internal.uniondf.joindfd,Seqid,left_anti.orderByid.show它将强制转换您,但会得到结果。scala>dfd.joindf.selectid,Seqid,internal.uniondf.joindfd,Seqid,left_anti.orderByid.show