Google cloud dataflow Google云数据流中基于文件的源使用示例

Google cloud dataflow Google云数据流中基于文件的源使用示例,google-cloud-dataflow,Google Cloud Dataflow,有人能举一个简单的子类化FileBasedSource的例子吗?我是谷歌数据流新手,对Java非常缺乏经验。我的目标是在将行号作为键的同时读取文件,或者根据行号跳过行 的实现是理解基于文件的源如何工作的一个很好的起点。您的阅读器可能需要类似的内容(其中readNextLine()读取到行尾并更新偏移量): 我用完整的示例创建了一个要点,它可能比XMLSource更简单。老实说,我发现XMLSource示例很难理解,因为它增加了XML的复杂性,增加了读取文件的问题。我必须想办法“减少”。但我找不到

有人能举一个简单的子类化FileBasedSource的例子吗?我是谷歌数据流新手,对Java非常缺乏经验。我的目标是在将行号作为键的同时读取文件,或者根据行号跳过行

的实现是理解基于文件的源如何工作的一个很好的起点。您的阅读器可能需要类似的内容(其中readNextLine()读取到行尾并更新偏移量):


我用完整的示例创建了一个要点,它可能比XMLSource更简单。

老实说,我发现XMLSource示例很难理解,因为它增加了XML的复杂性,增加了读取文件的问题。我必须想办法“减少”。但我找不到。LineIO示例目前用于测试,仅在私人回购中可见,但我可以探索发布它。我发布了一个要点,并修改了答案。
protected void startReading(ReadableByteChannel channel) throws IOException {
  if (getCurrentSource().getMode() == FileBasedSource.Mode.SINGLE_FILE_OR_SUBRANGE) {
    // If we are not at the beginning of a line, we should ignore the current line.
    if (getCurrentSource().getStartOffset() > 0) {
      SeekableByteChannel seekChannel = (SeekableByteChannel) channel;
      // Start from one character back and read till we find a new line.
      seekChannel.position(seekChannel.position() - 1);
      nextOffset = seekChannel.position() + readNextLine(new ByteArrayOutputStream());
    }
  }
}