随着像 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