我在Google云端存储上有超过10万个包含JSON对象的文件,我想创建一个维护filesytem结构的镜像,但是从文件内容中删除了一些字段。 < / p>
我尝试在Google Cloud Dataflow上使用Apache Beam,但它会拆分所有文件,我无法再维护该结构了。我正在使用TextIO
。
我的结构类似于reports/YYYY/MM/DD/<filename>
但数据流输出到output_dir/records-*-of-*
。
如何让Dataflow不拆分文件并使用相同的目录和文件结构输出?
或者,是否有更好的系统可以对大量文件进行此类编辑?
答案 0 :(得分:1)
您无法直接使用TextIO
,但Beam 2.2.0将包含一项可帮助您自行编写此管道的功能。
如果您可以在HEAD上构建Beam的快照,则可以使用此功能。 注意:在撰写此答案和发布Beam 2.2.0之间,API可能会略有变化
Match.filepatterns()
创建与filepattern匹配的PCollection<Metadata>
个文件PCollection<Metadata>
使用ParDo
映射FileSystems.open()
,使用FileSystems
对每个文件执行您想要的操作:
ReadableByteChannel
API读取输入文件,然后使用标准Java实用程序来使用FileSystems.create()
。Match
API编写输出文件。请注意,PTransform
是一个非常简单的FileSystems
(在引擎盖下使用Environment="Production=production"
),您可以在项目中使用它的另一种方法是复制粘贴(必要的)它的代码部分到你的项目中,或研究它的代码并重新实现类似的东西。如果您对更新Beam SDK版本犹豫不决,可以选择此选项。