隨着像 df.write.csv("s3a://mybucket/mytable")
df.write.csv("s3a://mybucket/mytable")
我很明白知道哪裏寫文件/對象,但由於S3的最終一致性保證,我不能100%確定從該位置獲取列表將返回所有(甚至是任何)剛剛寫入的文件。如果我能得到剛纔寫的文件/對象列表,那麼我可以爲Redshift COPY命令準備一個清單文件,而不用擔心最終的一致性。這是可能的 - 如果是這樣的話?是否有可能在DataFrame寫入時檢索文件列表,或者是否有火花將其存儲在某個地方?
回答
spark-redshift
庫可以爲您處理此問題。如果你想自己做,你可以看看他們是如何在這裏做到這一點:https://github.com/databricks/spark-redshift/blob/1092c7cd03bb751ba4e93b92cd7e04cffff10eb0/src/main/scala/com/databricks/spark/redshift/RedshiftWriter.scala#L299
編輯:我避免對一致性的更多擔心通過df.coalesce(fileCount)
輸出已知數量的文件部分(紅移你想多您的羣集中的切片)。然後,您可以檢查Spark代碼中列出了多少個文件,以及Redshift stl_load_commits
中加載了多少個文件。
很好意識到一致性風險;您可以通過延遲創建可見性和已找到的已刪除對象在列表中找到它。 AFAIK,無法獲取創建的文件列表,因爲它的任務可以在任務中生成他們想要的任何內容到任務輸出目錄,然後將其編組(通過列表和複製)到最終輸出目錄中,
在S3上面沒有一致性層(S3mper,s3guard等)的情況下,您可以讀&旋轉「稍微」一點,以便讓分片追上。我對「一點點」的好價值不知道。
但是,如果您打電話給fs.write.csv()
,可能是因爲在用於將任務輸出傳播到作業目錄的提交程序中列出不一致而被捕獲;這是通過列表+複製在S3A中完成的,請參閱。
爲什麼選票?我錯了什麼?如果我告訴細節,我會糾正它。 –
我不知道爲什麼你得到了downvote,你提供了很多關於我不知道存在的一致性層的很好的信息(我只知道EMRFS)。儘管你最後一句話看起來像是在句子中間結束了。 – SourceSimian
- 1. 當存儲在列表中時是否可以檢索泛型?
- 2. 是否有可能將UIButton存儲在plist文件中?
- 3. 是否有可能在Windows中寫入任何內存地址
- 4. 檢查是否存在,是否存在,是否爲某個值
- 5. 是否有可能將.gzip文件導入sqlite /我可以在導入時跳過某個列嗎?
- 6. 檢查是否有其他用戶有權寫入文件
- 7. 是否有可能爲Lucene來索引只存儲在一個文件中
- 8. 是否有可能在XUL文件中寫入jQuery?
- 9. 是否有可能檢查.Bak文件是否損壞或沒有恢復它
- 10. 檢查表值存在沒有Javascript,是否有可能?
- 11. 是否有可能使用VB.Net BinaryWriter從文件中存儲/檢索位數據?
- 12. 是否只有Apache Axis wsdl2Java或者是否有其他庫?
- 13. 是否有可能在清單文件
- 14. 檢查現有表插入一列,值是否存在或不存在?
- 15. 是否有可能在一個表中有兩個FILESTREAM列?
- 16. 檢查索引文件是否存在
- 17. Redis DB描述/標題是否存儲在某個地方?
- 18. 是否有可能檢索SQL結果分組爲列表
- 19. 是否有可能在python中編寫防火牆?
- 20. 是否有可能寫在typoscript
- 21. 是否有可能將數組存儲在Flex中的DataGridColumn中?
- 22. 是否有可能將值作爲ArrayList存儲在SharedPreferences中?
- 23. 是否有可能將二維數組存儲在info.plist中
- 24. 如何檢查蓮花配方中是否存在文件?
- 25. 是否有可能知道哪些文件是由火狐硒
- 26. 是否有可能以某種方式排除cfdirectory的文件?
- 27. 是否有可能將行按照時間戳存儲一天?
- 28. Android的火力地堡 - 是否有可能在startAt()和ENDAT()
- 29. 是否有可能在運行時檢索包含類的文件?
- 30. 是否有可能將您的值保存在本地?
這仍在調用FileSystem.listStatus(),因此易受S3列表不一致性的影響。 –
添加關於使用'coalesce()'輸出已知文件數的注意事項 –
擔心spark-redshift庫選擇忽略問題,但需要一些有趣的解決方法。感覺Spark應該真的有一個功能,可以通過驅動程序寫出一個清單 - 一個文件,而不是工作人員的目錄;那將解決這個問題。 – SourceSimian