从Apache Beam中的GCS读取文件

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

我一直在参考GCS文档中的这个链接: GCS客户端库 。 但实际上并没有成功。 如果有人能提供一个真正有用的例子。 谢谢。

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

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

  org.apache.beam beam-sdks-java-extensions-google-cloud-platform-core  

然后设置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. }