我有两个表或dataframes
,我想用一个表来更新另一个表。另外我知道spark sql不支持update a set a.1= b.1 from b where a.2 = b.2 and a.update < b.update
。
请建议我如何实现这一点,因为火花是不可能的。
表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|
+------+----+------+
在火花中还有其他办法吗?
答案 0 :(得分:1)
使用pyspark
,您可以使用subtract()
查找number
中table1
不存在的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|
+------+----+------+