我有两个表或dataframes
,我想使用一个来更新另一个。我也知道spark sql不支持update a set a.1= b.1 from b where a.2 = b.2 and a.update < b.update
。请建议我如何才能实现这一点,因为这是不可能的火花。
table1
+------+----+------+
|number|name|update|
+------+--- -------+
| 1| a| 08-01|
| 2| b| 08-02|
+------+----+------+
表
+------+----+------+
|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中是否有其他的方法来做到这一点?
使用pyspark
,您可以使用subtract()
来查找table2
中不存在的table1
的number
值,然后使用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|
+------+----+------+