2016-10-11 14 views
0

私は2つのテーブルまたはdataframesを持っていて、別のテーブルを更新したいと思います。また、私はスパークSQLはupdate a set a.1= b.1 from b where a.2 = b.2 and a.update < b.updateをサポートしていない知っている。 どうすればいいですか?スパークで別のテーブルを更新するために1つのテーブルを使用

TABLE1

+------+----+------+ 
|number|name|update| 
+------+--- -------+ 
|  1| a| 08-01| 
|  2| b| 08-02| 
+------+----+------+ 

table2の

+------+----+------+ 
    |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

pysparkを使用して、table2table1存在しないのnumber値を見つけるためにsubtract()を使用し、その結果table1table2から行方不明の観測まで濾過される二つのテーブルのunionAllを使用することができます。

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| 
+------+----+------+ 
+0

ありがとう!しかし、私はスパークシェル~~を使用しています –

関連する問題