【问题标题】:Read a file from GCS in Apache Beam从 Apache Beam 中的 GCS 读取文件
【发布时间】:2017-08-28 14:03:27
【问题描述】:

我需要从 GCS 存储桶中读取文件。我知道我必须使用 GCS API/客户端库,但我找不到任何与之相关的示例。

我一直在 GCS 文档中引用此链接: GCS Client Libraries。却是真的打不出来。如果有人可以提供一个真正有帮助的例子。 谢谢。

【问题讨论】:

  • 默认情况下,TextIO、AvroIO 等所有转换都可以使用 GCS 文件,例如TextIO.read().from("gs://your-bucket/path/to/your-files/*")。他们不适合你吗?
  • 嗨@jkff 我知道。我忘了提及我为什么要使用客户端库。实际上,我面临的问题是,当我使用 TextIO.read() 读取文件时,我得到的数据与文件中出现的顺序不同。我需要使数据的顺序与文件中的顺序完全相同。如何做到这一点?
  • 正确,PCollection 是无序的,因为它们是并行处理的,而顺序排序与并行性相反。也就是说,肯定存在您希望在并行管道内进行一些顺序处理的情况。您能否详细介绍一下您的用例以及您需要订购的原因?
  • @jkff 我正在尝试完成这个“stackoverflow.com/questions/45862173/…”。所以我只想知道客户端库在这种情况下会有帮助吗?它会按顺序给我文件数据吗?

标签: java google-cloud-dataflow apache-beam


【解决方案1】:

好的。如果您想简单地从 GCS 读取文件,而不是作为 PCollection 而是作为常规文件,并且如果您在使用 GCS Java 客户端库时遇到问题,您还可以使用 Apache Beam FileSystems API:

首先,您需要确保在 beam-sdks-java-extensions-google-cloud-platform-core 上的 pom.xml 中有一个 Maven 依赖项,其中包含 gs:// 文件系统的实现:

<dependency>
  <groupId>org.apache.beam</groupId>
  <artifactId>beam-sdks-java-extensions-google-cloud-platform-core</artifactId>
</dependency>

然后设置 FileSystems API(默认情况下在所有管道中设置,但如果您在管道之外使用它,则需要手动进行)。

PipelineOptions options = PipelineOptionsFactory.create();
// ...Optionally fill in options such as GCP credentials...
// (see GcpOptions class)
FileSystems.setDefaultPipelineOptions(options);

然后就可以使用了:

ReadableByteChannel chan = FileSystems.open(FileSystems.matchNewResource(
  "gs://path/to/your/file", false /* is_directory */));
try (InputStream stream = Channels.newInputStream(chan)) {
  // Use regular Java utilities to work with the input stream.
}

【讨论】:

  • 我正在遵循这种方法并在我的本地计算机上运行程序,并收到以下错误,Exception in thread "main" java.lang.IllegalStateException: Unable to find registrar for gs at org.apache.beam.sdk.io.FileSystems.getFileSystemInternal(FileSystems.java:447) at org.apache.beam.sdk.io.FileSystems.matchNewResource(FileSystems.java:517)。有什么帮助吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2020-05-23
  • 2021-07-31
  • 1970-01-01
  • 2021-08-03
  • 1970-01-01
  • 2018-08-11
相关资源
最近更新 更多