簡體   English   中英

Spark HiveContext:插入覆蓋從中讀取的同一表

[英]Spark HiveContext : Insert Overwrite the same table it is read from

我想在HiveContext中使用PySpark來應用SCD1和SCD2。 在我的方法中,我正在讀取增量數據和目標表。 閱讀后,我將加入他們的進階方法。 我正在對所有源數據幀執行registerTempTable。 我正在嘗試將最終數據集寫入目標表,並且面臨一個問題,即從讀取表中無法進行插入覆蓋。

請為此提出一些解決方案。 我不想將中間數據寫入物理表並再次讀取。

是否有任何屬性或方法可以存儲最終數據集,而又不保留對其讀取表的依賴性。 這樣,可能會覆蓋表。

請提出建議。

您永遠不應覆蓋正在讀取的表。 在發生故障的情況下,這可能會導致數據損壞到數據完全丟失。

同樣重要的是要指出,正確實現的SCD2永遠都不應覆蓋整個表,而可以將其實現為(主要是)附加操作。 據我所知,沒有可變存儲就無法有效地實現SCD1,因此它不太適合Spark。

當我檢查Spark的文檔時,當我檢查那里的一個物業時,一個念頭響了起來。

由於我的桌子是鑲木地板,因此我使用蜂巢元存儲通過將此屬性設置為false來讀取數據。

hiveContext.conf("spark.sql.hive.convertMetastoreParquet","false")

這個解決方案對我來說很好。

DataFrame不允許插入覆蓋到相同的位置或相同的表,您可以使用下面的選項來解決您的問題。

  1. 在spark / hivecontext上運行Hive插入覆蓋查詢,但是如果作業失敗數據失敗,則會在該分區上損壞該問題,因此請務必小心。
  2. 作業完成后,其他選項保存到Temp表中,覆蓋到目標表中。
  3. 如果仍要以編程方式使用,則可以將數據幀保存在tmp位置,並使用HDFS I / O移至目標分區位置

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM