我有一個相當小的,簡單的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甚至呼籲一個給定的名稱)。
錯誤是在附加文件中
你好,
有沒有可能你試圖創建表之前,失敗了?甚至有一個創建表失敗這一次嗎?有時我們的開源團隊似乎這個問題,錯誤信息誤導。基本上,可能有一個運行當你試圖創建表,但失敗了。失敗的任務創建的文件上傳到S3,然後任何重試將看到文件,報告,文件已經存在。我建議兩個最佳實踐對預防:
1)確保你擺脫可能的腐敗文件。
)總是盲目地刪除表目錄當你想覆蓋它,以防有剩下的腐敗文件。
b)你的表創建封裝在一個try - catch塊。如果失敗了,要捕獲異常並清理文件夾。
2)當你得到這個表格寫錯誤——你應該去激發集群UI和深入的任務未能理解真正的錯誤。僅僅依靠錯誤消息在筆記本上是不夠的。
你好,我得到這個錯誤。
我曾經嚐試過刪除,確認刪除但沒有解決我的問題。看來databrick S3AFileSystem的最後一行代碼實現:“com.databricks.s3a.S3AFileSystem.create (S3AFileSystem.java: 452)”
這個錯誤對我來說並不間歇dataframe和一致的。
通知你,所有其他dataframes除了這一個特定的框架寫正確地拚花。他們都有25個分區來自相同的數據源,它隻是在不同段的一個表。
編寫代碼:
df .write .mode (SaveMode.Overwrite) .parquet (s3Prefix + s“{name} .parquet美元”)
完整的堆棧跟蹤: