使用一个表更新火花中的另一个表
Posted
技术标签:
【中文标题】使用一个表更新火花中的另一个表【英文标题】:using one table to update another table in spark 【发布时间】:2016-10-11 08:53:06 【问题描述】:我有两张表或dataframes
,我想用一张来更新另一张。我也知道 spark sql 不支持update a set a.1= b.1 from b where a.2 = b.2 and a.update < b.update
。
请建议我如何实现这一点,因为这在 spark 中是不可能的。
表1
+------+----+------+
|number|name|update|
+------+--- -------+
| 1| a| 08-01|
| 2| b| 08-02|
+------+----+------+
表2
+------+----+------+
|number|name|update|
+------+--- -------+
| 1| a2| 08-03|
| 3| b| 08-02|
+------+----+------+
我想得到这个:
+------+----+------+
|number|name|update|
+------+--- -------+
| 1| a2| 08-03|
| 2| b| 08-02|
| 3| b| 08-02|
+------+----+------+
在 spark 中还有其他方法可以做到这一点吗?
【问题讨论】:
【参考方案1】:使用pyspark
,您可以使用subtract()
来查找table1
的number
值在table2
中不存在,然后使用两个表中的unionAll
,其中table1
被过滤为来自table2
的缺失观察。
diff = (table1.select('number')
.subtract(table2.select('number'))
.rdd.map(lambda x: x[0]).collect())
table2.unionAll(table1[table1.number.isin(diff)]).orderBy('number').show()
+------+----+------+
|number|name|update|
+------+----+------+
| 1| a2| 08-03|
| 2| b| 08-02|
| 3| b| 08-02|
+------+----+------+
【讨论】:
谢谢!不过我用过spark-shell~~以上是关于使用一个表更新火花中的另一个表的主要内容,如果未能解决你的问题,请参考以下文章