For*_*ick 6 java google-cloud-dataflow
我正在寻找一种读取整个文件的方法,以便将每个文件完全读取为单个字符串。我想在gs://my_bucket/*/*.json上传递JSON文本文件模式,使用ParDo,然后完全处理每个文件。
最好的方法是什么?
我将给出最普遍有用的答案,即使在特殊情况下 [1] 你可能会做不同的事情。
我认为你想要做的是定义一个新的子类FileBasedSource并使用Read.from(<source>). 您的源代码还将包括FileBasedReader;的子类 源包含配置数据,阅读器实际进行读取。
我认为 API 的完整描述最好留给 Javadoc,但我将重点介绍关键的覆盖点以及它们与您的需求的关系:
FileBasedSource#isSplittable()你会想要覆盖并返回false。这将表明不存在文件内分割。FileBasedSource#createForSubrangeOfFile(String, long, long)您将重写以仅返回指定文件的子源。FileBasedSource#createSingleFileReader()您将覆盖为当前文件生成 a FileBasedReader(该方法应该假设它已经拆分为单个文件的级别)。实现阅读器:
FileBasedReader#startReading(...)您将不执行任何操作;框架已经为您打开了该文件,并且它将关闭它。FileBasedReader#readNextRecord()您将重写以将整个文件作为单个元素读取。[1] 一个简单的特殊情况示例是,当您实际上拥有少量文件时,您可以在提交作业之前扩展它们,并且它们都需要相同的时间来处理。然后你就可以使用Create.of(expand(<glob>))后面的ParDo(<read a file>).
| 归档时间: |
|
| 查看次数: |
993 次 |
| 最近记录: |