問題
您正在使用JDBC編寫SQL表主鍵約束,和工作失敗PrimaryKeyViolation錯誤。
或者,你使用JDBC編寫SQL表沒有主鍵約束,和寫你最近看到重複的條目在表。
導致
當Apache火花執行JDBC編寫一個分區的DataFrame寫入到一個SQL表。這通常是作為一個JDBC事務,為了避免多次插入數據。然而,如果事務失敗後提交發生,但在最後階段完成之前,有可能重複的數據複製到SQL表。
的PrimaryKeyViolation寫操作時發生錯誤試圖插入一個主鍵重複條目。
解決方案
您應該使用緩衝區寫入臨時表,並確保沒有重複數據。
- 驗證投機執行禁用你的火花配置:火花。錯誤的猜測。這個默認情況下是禁用的。
- 創建一個臨時表的SQL數據庫。
- 修改你的火花代碼寫入臨時表。
- 火花寫完成後,檢查臨時表,以確保沒有重複的數據。
- 將臨時表與目標表的SQL數據庫。
- 刪除臨時表。