如何使用 google 数据流计算文件中的总行数
How to count total number of rows in a file using google dataflow
我想知道是否有办法使用 google 数据流找出文件中的总行数。任何代码示例和指针都会有很大帮助。基本上,我有一个方法
int getCount(String fileName) {}
因此,上述方法将 return 总行数及其实现将是数据流代码。
谢谢
您的用例似乎不需要分布式处理,因为文件已压缩,因此无法并行读取。但是,您可能仍然会发现使用 Dataflow API 非常有用,因为它们易于访问 GCS 和自动解压缩。
由于您还希望将结果作为实际 Java 对象从管道中获取,因此您需要使用直接运行程序,它在进程中运行,无需与数据流服务对话或执行任何操作分布式处理,但是在 return 中它提供了将 PCollection
提取到 Java 对象中的能力:
像这样:
PipelineOptions options = ...;
DirectPipelineRunner runner = DirectPipelineRunner.fromOptions(options);
Pipeline p = Pipeline.create(options);
PCollection<Long> countPC =
p.apply(TextIO.Read.from("gs://..."))
.apply(Count.<String>globally());
DirectPipelineRunner.EvaluationResults results = runner.run(p);
long count = results.getPCollection(countPC).get(0);
我想知道是否有办法使用 google 数据流找出文件中的总行数。任何代码示例和指针都会有很大帮助。基本上,我有一个方法
int getCount(String fileName) {}
因此,上述方法将 return 总行数及其实现将是数据流代码。
谢谢
您的用例似乎不需要分布式处理,因为文件已压缩,因此无法并行读取。但是,您可能仍然会发现使用 Dataflow API 非常有用,因为它们易于访问 GCS 和自动解压缩。
由于您还希望将结果作为实际 Java 对象从管道中获取,因此您需要使用直接运行程序,它在进程中运行,无需与数据流服务对话或执行任何操作分布式处理,但是在 return 中它提供了将 PCollection
提取到 Java 对象中的能力:
像这样:
PipelineOptions options = ...;
DirectPipelineRunner runner = DirectPipelineRunner.fromOptions(options);
Pipeline p = Pipeline.create(options);
PCollection<Long> countPC =
p.apply(TextIO.Read.from("gs://..."))
.apply(Count.<String>globally());
DirectPipelineRunner.EvaluationResults results = runner.run(p);
long count = results.getPCollection(countPC).get(0);