2017-08-29 56 views
-1

我需要一個update表蜂巢狀更新表蜂巢使用星火斯卡拉

update A from B 
    set 
     Col5 = A.Col2, 
     Col2 = B.Col2, 
     DT_Change = B.DT, 
     Col3 = B.Col3, 
     Col4 = B.Col4 
where A.Col1 = B.Col1 and A.Col2 <> B.Col2 

使用Scala的星火RDD

我怎樣才能做到這一點?

+0

歡迎來到Stack Overflow!請閱讀關於提出一個好問題的提示:https://stackoverflow.com/help/how-to-ask – TrevorBrooks

回答

0

我想將這個問題分爲兩個問題來解釋它簡單。 第一個問題:如何將Spark RDD數據寫入Hive表? 最簡單的方法是使用方法rdd.toDF()將RDD轉換爲Spark SQL(數據框)。然後使用df.registerTempTable("temp_table")將數據幀註冊爲臨時表。現在您可以從temptable查詢並使用sqlContext.sql("insert into table my_table select * from temp_table")插入到配置單元表中。 第二個問題:如何從Spark更新Hive表? 截至目前,Hive並不適合創紀錄的更新。更新只能在支持ACID的表上執行。一個主要限制是只有ORC格式支持更新Hive表。你可以從https://cwiki.apache.org/confluence/display/Hive/Hive+Transactions 找到它的一些信息,你可以參考How to Updata an ORC Hive table form Spark using Scala

很少有方法可能不贊成使用spark 2.x,並且可以檢查最新方法的spark 2.0文檔。 雖然可以有更好的方法,但這是我能想到的最簡單的方法。

+0

我的問題是如何在2個不同的rdd中加載2個表,然後在其中一個rdd上進行更新將結果保存在配置單元表 –

+0

@WR由於表中的數據已經結構化,所以使用數據框代替rdds是正確的方法。在這種情況下,將表1中的數據加載到dataframe1中,將表2中的數據加載到dataframe2中。現在可以對這些數據幀執行轉換或連接。 例如,df1.join( df2,col(「df1.col1」)=== col(「df2.col1」),「left_outer」) – Satya