【问题标题】:PySpark - how to update Dataframe by using join?PySpark - 如何使用连接更新 Dataframe?
【发布时间】:2019-10-14 13:10:47
【问题描述】:

我有一个数据框:

id,value
1,11
2,22
3,33

还有另一个数据框 b:

id,value
1,123
3,345

我想用来自 b 的所有匹配值更新数据框 a(基于列 'id')。

最终数据框“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|
+---+---+-----+

谢谢。

【问题讨论】:

  • 它会投射你,但它会给你结果。 scala> dfd.join(df.select("id"),Seq("id"),"inner").union(df.join(dfd,Seq("id"),"left_anti")).orderBy( "id").show

标签: sql apache-spark pyspark


【解决方案1】:

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

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 TypeError("Column is not iterable")
  • column() 替换为select()
猜你喜欢
  • 2017-01-27
  • 1970-01-01
  • 2018-08-09
  • 2019-09-21
  • 2016-02-14
  • 2018-03-16
  • 2020-09-06
  • 1970-01-01
相关资源
最近更新 更多