2016-08-30 74 views
1

我想知道是否有方法可以使用Google数据流找出文件中没有行的总数。任何代码示例和指针都将非常有帮助。基本上,我有一个方法为如何使用Google数据流统计文件中的行总数

int getCount(String fileName) {} 

所以,上面的方法将返回行的总数,其实现将数据流代码。

感谢

+0

你能弄清楚到底有多大的文件,为什么要使用数据流为这个而不是一个直接读取文件并逐行计数行的Java程序?除非该文件的大小至少为几GB,并且除非该文件已存储在Google Cloud Storage上,否则Dataflow很可能不是该工作的最佳工具。 – jkff

+0

感谢您的关注。是的文件基本上是GB的大小的gz文件。此外,文件位于GCS存储区。除了数据流之外,您是否还有其他方式想法或者有示例代码,供我查看。我能够使用PCollection(String)中的数据流从GCS桶中读取文件,并在其上应用Count.Globally,但这又给了我PCollection(Long),所以无法从我的方法返回单个long值。谢谢。 – Programmer

+0

也许这有帮助吗? https://cloud.google.com/dataflow/model/combine – chchrist

回答

2

好像你的使用情况是一个不需要分布式处理,因为该文件被压缩,因此不能并行读取。但是,为了便于访问GCS和自动解压缩,您仍然可能会发现使用Dataflow API很有用。

由于您还想将结果作为实际的Java对象从流水线中取出,因此您需要使用运行进程中的Direct runner,而无需与Dataflow服务通信或进行任何分布式处理,但是回到它提供提取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); 
相关问题