如何在数据流作业中识别已处理的文件?我使用通配符从云存储中读取文件。但每次作业运行时,它都会重新读取所有文件。
这是一个批处理作业,以下是我正在使用的示例读取TextIO。
PCollection<String> filePColection = pipeline.apply("Read files from Cloud Storage ", TextIO.read().from("gs://bucketName/TrafficData*.txt"));
答案 0 :(得分:0)
要查看与您的通配符匹配的文件列表,您可以使用gsutils
,即云存储命令行实用程序。您可以执行以下操作:
gsutils ls gs://bucketName/TrafficData*.txt
现在,当多次运行批处理作业时,您的管道无法知道它已经分析了哪些文件。为避免分析新文件,您可以执行以下任一操作:
定义流式处理作业,并使用TextIO
的{{1}}功能。只要你想继续处理文件,就必须让你的工作继续运行。
找到一种方法为您的管道提供已经分析过的文件。为此,每次运行管道时,您都可以生成要分析的文件列表,将其放入watchForNewFiles
,使用PCollection
读取每个文件,并将分析文件列表存储在某处。稍后,当您再次运行管道时,您可以将此列表用作您不需要再次运行的文件的黑名单。
如果您想围绕这两个选项之一制定解决方案,请在评论中告诉我们。