使用一个表来更新spark中的另一个表

时间:2016-10-11 08:53:06

标签: scala apache-spark merge apache-spark-sql

我有两个表或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|
    +------+----+------+

在火花中还有其他办法吗?

1 个答案:

答案 0 :(得分:1)

使用pyspark,您可以使用subtract()查找numbertable1不存在的table2值,从而使用unionAlltable1过滤为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|
+------+----+------+