如何识别数据流作业中的已处理文件

时间:2018-05-23 04:47:00

标签: google-cloud-storage google-cloud-dataflow apache-beam

如何在数据流作业中识别已处理的文件?我使用通配符从云存储中读取文件。但每次作业运行时,它都会重新读取所有文件。

这是一个批处理作业,以下是我正在使用的示例读取TextIO。

PCollection<String> filePColection  = pipeline.apply("Read files from Cloud Storage ", TextIO.read().from("gs://bucketName/TrafficData*.txt"));

1 个答案:

答案 0 :(得分:0)

要查看与您的通配符匹配的文件列表,您可以使用gsutils,即云存储命令行实用程序。您可以执行以下操作:

gsutils ls gs://bucketName/TrafficData*.txt

现在,当多次运行批处理作业时,您的管道无法知道它已经分析了哪些文件。为避免分析新文件,您可以执行以下任一操作:

  1. 定义流式处理作业,并使用TextIO的{​​{1}}功能。只要你想继续处理文件,就必须让你的工作继续运行。

  2. 找到一种方法为您的管道提供已经分析过的文件。为此,每次运行管道时,您都可以生成要分析的文件列表,将其放入watchForNewFiles,使用PCollection读取每个文件,并将分析文件列表存储在某处。稍后,当您再次运行管道时,您可以将此列表用作您不需要再次运行的文件的黑名单。

  3. 如果您想围绕这两个选项之一制定解决方案,请在评论中告诉我们。