簡體   English   中英

將Apache Beam的PCollection對象收集到驅動程序的內存中

[英]Collecting the Apache Beam's PCollection objects into driver's memory

是否可以將Apache Beam中PCollection中的對象收集到驅動程序的內存中? 就像是:

PCollection<String> distributedWords = ...
List<String> localWords = distributedWords.collect();

我在這里從Apache Spark借用了該方法,但是我想知道Apache Beam是否也具有類似的功能!

不直接。 管道可以將輸出寫入接收器(例如GCS存儲桶或BigQuery表),並在需要時通過諸如PubSub之類的信號向驅動程序發送信號。 然后,驅動程序從通用源讀取保存的數據。 這種方法適用於所有Beam跑步者。

針對特定情況,可能還有其他解決方法。 例如,DirectRunner是一個本地內存執行引擎,該引擎以順序方式在本地進程中運行管道。 它主要用於測試,如果適合您的用例,則可以利用它,例如,通過將處理后的數據存儲在共享的內存中,驅動程序和管道執行邏輯都可以訪問它,例如,請參見TestTable 這在其他跑步者中不起作用。

通常,管道執行可以並行發生,而如何執行則由運行程序(例如Flink,Dataflow或Spark)控制。 梁管道只是對要應用於數據以及數據源和接收器的轉換的定義。 您的驅動程序本身不會讀取或收集數據,也不會直接與執行節點通信,它基本上只會將管道定義發送給運行程序,然后由運行程序決定如何執行它,並可能將其分散到整個機器中(或使用其他執行原語來運行它)。 然后,每個執行節點可以通過從輸入源中提取數據,進行轉換然后將其寫入輸出中來獨立處理數據。 通常,該節點不了解驅動程序,僅知道如何執行管道定義。 執行環境/運行程序可能非常不同,並且當前沒有要求運行程序實現這種收集機制。 參見https://beam.apache.org/documentation/execution-model/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM