java - 云数据流: reading entire text files rather than lines by line

标签 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()您将重写以生成 FileBasedReader对于当前文件(该方法应该假设它已经拆分为单个文件的级别)。

实现阅读器:

  • FileBasedReader#startReading(...)您将不执行任何操作;框架已经为您打开了该文件,并且它将关闭它。
  • FileBasedReader#readNextRecord()您将重写以将整个文件作为单个元素读取。

[1] 一个简单的特殊情况示例是,当您实际上拥有少量文件时,您可以在提交作业之前扩展它们,并且它们都需要相同的时间来处理。那么你可以使用 Create.of(expand(<glob>))接下来是 ParDo(<read a file>) .

关于java - 云数据流: reading entire text files rather than lines by line,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37667839/

相关文章:

Java 从 HDFS 传输到 S3

java - 捕获重量级java组件?

java - 将转换应用于一个输出标签

java - 数据流中的错误 : io. grpc.StatusRuntimeException:不可用

google-cloud-dataflow - "The Dataflow appears to be stuck"

java - 创建一个 HttpEntity

java - 如何在客户端加载 GWT 中的文件?

java - 应用设计模式设置和获取货币矩阵值

java - 使用本地模拟器测试 PubsubIO 读取

java - 进行通用数据流转换