2017-02-14 81 views
2

在追加模式下將DF插入Hive內表的正確方法是什麼?看來我們可以直接使用「saveAsTable」方法將DF寫入Hive,或者將DF存儲到臨時表中,然後使用查詢。如何將Spark DataFrame插入Hive內部表?

df.write().mode("append").saveAsTable("tableName") 

OR

df.registerTempTable("temptable") 
sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable") 

將在第二方法追加記錄還是覆蓋它嗎?

是否有任何其他方式有效地將DF寫入Hive內部表?

+0

它取決於(類型)將如何存儲您的表和位置。 – FaigB

回答

2

df.saveAsTable("tableName", "append")已棄用。相反,你應該採取第二種方法。

sqlContext.sql("CREATE TABLE IF NOT EXISTS mytable as select * from temptable") 

如果表不列入存在,它將創建表。當你第二次運行你的代碼時,你需要刪除現有的表,否則你的代碼將以異常退出。

另一種方法,如果你不想丟表。 單獨創建一個表,然後將數據插入到該表中。

下面的代碼將數據追加到現有表

sqlContext.sql("insert into table mytable select * from temptable") 

及以下的代碼將在數據覆蓋到現有表

sqlContext.sql("insert overwrite table mytable select * from temptable") 

這個答案是基於星火1.6.2。如果您使用其他版本的Spark,我會建議檢查相應的文檔。

+0

謝謝,它的工作正常。 – Shankar

5

這裏的兩個選項都不適用於我/可能因答案寫入而折舊。

根據最新spark API docs(爲Spark 2.1),它使用從DataFrameWriter

我使用的是Python PySpark API,但它會在斯卡拉相同的insertInto()方法:

df.write.insertInto(target_db.target_table,overwrite = False) 

上面的工作對我來說。