取消
顯示的結果
而不是尋找
你的意思是:

為什麼我得到的io。IOException:文件已經存在的saveAsTable覆蓋模式?

MarcLimotte
新的貢獻者二世

我有一個相當小的,簡單的DataFrame,月:

month.schema

org.apache.spark.sql.types。StructType = StructType (StructField(月,DateType,真的),StructField (real_month TimestampType,真的),StructField (month_millis LongType,真的)

本月Dataframe來源於一個Dataframe最初創建從一個來自sc.parallelize抽樣(…)。

我試著將其保存為一個表:

month.write.mode (SaveMode.Overwrite) .saveAsTable (“month_x2”)

我得到一個例外。問題的根源似乎(也參見下麵的全部加亮):

引起的:java。IOException:文件已經存在:/ databricks-prod-storage-virginia dbc - 44061 - e6b - 9 - dd3/0 / user /蜂巢/倉庫/ month_x2 /部分- r - 00002 - 9858 - e235 - 1 - c6c - 4276 - 800 d - 18 - c8a760a416.gz.parquet

我重新啟動集群,重新筆記本,每次都得到相同的結果。我用覆蓋模式(雖然我認為non-overwrite產生不同的錯誤)。同時,我得到這個錯誤,即使我改變表名(即第一saveAsTable甚至呼籲一個給定的名稱)。

錯誤是在附加文件中

12個回複12

User16765128951
因素二世

你好,

有沒有可能你試圖創建表之前,失敗了?甚至有一個創建表失敗這一次嗎?有時我們的開源團隊似乎這個問題,錯誤信息誤導。基本上,可能有一個運行當你試圖創建表,但失敗了。失敗的任務創建的文件上傳到S3,然後任何重試將看到文件,報告,文件已經存在。我建議兩個最佳實踐對預防:

1)確保你擺脫可能的腐敗文件。

)總是盲目地刪除表目錄當你想覆蓋它,以防有剩下的腐敗文件。

b)你的表創建封裝在一個try - catch塊。如果失敗了,要捕獲異常並清理文件夾。

2)當你得到這個表格寫錯誤——你應該去激發集群UI和深入的任務未能理解真正的錯誤。僅僅依靠錯誤消息在筆記本上是不夠的。

JungKim
新的貢獻者二世

你好,我得到這個錯誤。

我曾經嚐試過刪除,確認刪除但沒有解決我的問題。看來databrick S3AFileSystem的最後一行代碼實現:“com.databricks.s3a.S3AFileSystem.create (S3AFileSystem.java: 452)”

這個錯誤對我來說並不間歇dataframe和一致的。

通知你,所有其他dataframes除了這一個特定的框架寫正確地拚花。他們都有25個分區來自相同的數據源,它隻是在不同段的一個表。

編寫代碼:

df .write .mode (SaveMode.Overwrite) .parquet (s3Prefix + s“{name} .parquet美元”)

完整的堆棧跟蹤:

完整的堆棧跟蹤文件

河
新的貢獻者三世

看到同樣的問題經常table_name盡管蠻力rm和改變

ThuyINACTIVETra
新的貢獻者二世

你好,

我得到這個異常當使用df.write.parquet(),覆蓋和默認模式,全新的位置。

唯一的例外是間歇性的,導致我們的數據管道隨機崩潰。

火花版本:1.6.0

有誰有更多的信息嗎?

河
新的貢獻者三世

類似問題後解決問題:

使用內存優化節點(計算優化問題)

——嚴格定義的模式(在pyspark專門為嵌套的集群,訂單可能)

——使用S3a山而不是S3n坐騎

——使用最新Hadooop 2和1.61 DB的火花

——也可能避免問題部分儲蓄為json,最後轉換成拚花(但注意大小文件可以顯示腐敗分區)

歡迎來到磚社區:讓學習、網絡和一起慶祝

加入我們的快速增長的數據專業人員和專家的80 k +社區成員,準備發現,幫助和合作而做出有意義的聯係。

點擊在這裏注冊今天,加入!

參與令人興奮的技術討論,加入一個組與你的同事和滿足我們的成員。

Baidu
map