2017-04-26 196 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

相關問題