代码之家  ›  专栏  ›  技术社区  ›  Vinicius Fortuna

如何使用数据流在地面军事系统上自动编辑超过10万个文件?

  •  0
  • Vinicius Fortuna  · 技术社区  · 8 年前

    我想创建一个镜像来维护文件系统结构,但从文件内容中删除了一些字段。

    TextIO

    我的结构是这样的 reports/YYYY/MM/DD/<filename> 但数据流输出到 output_dir/records-*-of-*

    如何使数据流不分割文件并以相同的目录和文件结构输出它们?

    或者,有更好的系统对大量文件进行这种编辑吗?

    1 回复  |  直到 8 年前
        1
  •  1
  •   jkff    8 年前

    您不能直接使用 TextIO

    注:在编写此答案和发布Beam 2.2.0之间,API可能会略有变化

    • 使用 Match.filepatterns() 创建 PCollection<Metadata>
    • 映射 PCollection<元数据> ParDo 这就是您希望使用的每个文件 FileSystems :
      • FileSystems.open() API来读取输入文件,然后使用标准Java实用程序 ReadableByteChannel .
      • FileSystems.create()

    请注意 Match 是一个非常简单的 PTransform 文件系统 你可以在你的项目中使用它的另一种方法是把它的代码(必要的部分)复制粘贴到你的项目中,或者研究它的代码并重新实现类似的东西。如果您对更新Beam SDK版本犹豫不决,可以选择此选项。