2017-04-26 207 views

回答

1

您应该能够通过使用GCS API来读取一个GCS文件的元数据。但是你需要文件名。您可以通过对包含文件名的PCollection<string>列表执行ParDo或其他转换来完成此操作。

我们没有对Excel文件的任何默认的读者。您可以通过使用文本输入:(ETL & Parsing CSV files in Cloud Dataflow

我不是在Excel中很懂行从CSV文件解析,文件格式的存储方式。如果您想一次处理一个文件,则可以使用文件的PCollection<string>。然后使用一些库一次解析excel文件。

如果一个Excel文件可以分成易于并行化的部分,我建议你看看这个文档(https://beam.apache.org/documentation/io/authoring-overview/)。 (如果您仍在使用Dataflow SDK,它应该是相似的。)在读取之前,可能需要将其分解为更小的块,以便从管道中获得更多并行化。在这种情况下,您可以使用IOChannelFactory从文件中读取数据。

2

CSV文件通常用于从excel中读取文件。这些文件可以分割和逐行读取,因此它们非常适合数据流。您可以使用TextIO.Read来拉取文件的每一行,然后将它们解析为CSV行。

如果你想使用不同的二进制excel格式,那么我相信你需要阅读整个文件并使用库来解析它。如果可以,我建议使用CSV文件。

至于阅读GCS元数据。我不认为你可以用TextIO做到这一点,但你可以直接调用GCS API来访问元数据。如果您只在程序开始时为几个文件执行此操作,那么它将起作用,而且不会太昂贵。如果您需要阅读这样的许多文件,您将为每个文件添加一个额外的RPC。

请小心不要多次读取同一个文件,我建议每次读取每个文件的元数据一次,然后将元数据写入侧面输入。然后,在您的ParDo中,您可以访问每个文件的侧面输入。

相关链接: ETL & Parsing CSV files in Cloud Dataflow

https://cloud.google.com/dataflow/java-sdk/JavaDoc/com/google/cloud/dataflow/sdk/io/TextIO.Read

https://cloud.google.com/dataflow/model/par-do#side-inputs

相关问题