![](/img/trans.png)
[英]Spark SQL(Hive query through HiveContext) INSERT OVERWRITE is not overwriting existing data if multiple partition is present in hive table
[英]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不允許插入覆蓋到相同的位置或相同的表,您可以使用下面的選項來解決您的問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.