Apache Beam Go SDK 快速入門

此快速入門將說明如何使用 Direct Runner 執行使用 Apache Beam Go SDK 撰寫的 範例管道。Direct Runner 會在本機電腦上執行管道。

如果您有興趣貢獻 Apache Beam Go 程式碼庫,請參閱貢獻指南

本頁內容

設定您的開發環境

請確認您已準備好 Go 開發環境。如果沒有,請依照下載並安裝頁面中的指示操作。

複製 GitHub 儲存庫

複製或下載 apache/beam-starter-go GitHub 儲存庫,並變更到 beam-starter-go 目錄。

git clone https://github.com/apache/beam-starter-go.git
cd beam-starter-go

執行快速入門

執行以下命令

go run main.go --input-text="Greetings"

輸出類似於以下內容

Hello
World!
Greetings

這些行可能會以不同的順序顯示。

探索程式碼

此快速入門的主要程式碼檔案是 main.go (GitHub)。程式碼會執行以下步驟

  1. 建立 Beam 管道。
  2. 建立初始 PCollection
  3. 套用轉換。
  4. 使用 Direct Runner 執行管道。

建立管道

在建立管道之前,請呼叫 Init 函式

beam.Init()

然後建立管道

pipeline, scope := beam.NewPipelineWithRoot()

NewPipelineWithRoot 函式會傳回新的 Pipeline 物件,以及管道的根範圍。範圍 是複合轉換的階層式分組。

建立初始 PCollection

PCollection 抽象概念代表潛在的分散式多元素資料集。Beam 管道需要資料來源來填入初始 PCollection。來源可以是有限的 (具有已知的固定大小) 或無限的 (具有無限大小)。

此範例會使用 Create 函式,從記憶體中的字串陣列建立 PCollection。產生的 PCollection 包含字串 "hello"、"world!" 和使用者提供的輸入字串。

elements := beam.Create(scope, "hello", "world!", input_text)

將轉換套用至 PCollection

轉換可以變更、篩選、分組、分析或以其他方式處理 PCollection 中的元素。

此範例會新增 ParDo 轉換,將輸入字串轉換為首字大寫

elements = beam.ParDo(scope, strings.Title, elements)

ParDo 函式會採用父範圍、將套用至資料的轉換函式,以及輸入 PCollection。它會傳回輸出 PCollection。

上一個範例會使用內建的 strings.Title 函式進行轉換。您也可以為 ParDo 提供應用程式定義的函式。例如

func logAndEmit(ctx context.Context, element string, emit func(string)) {
    beamLog.Infoln(ctx, element)
    emit(element)
}

此函式會記錄輸入元素,並傳回相同但未修改的元素。為此函式建立 ParDo,如下所示

beam.ParDo(scope, logAndEmit, elements)

在執行階段,ParDo 會對輸入集合中的每個元素呼叫 logAndEmit 函式。

執行管道

先前章節中顯示的程式碼會定義管道,但尚未處理任何資料。若要處理資料,請執行管道

beamx.Run(ctx, pipeline)

Beam 執行器會在特定平台上執行 Beam 管道。此範例會使用 Direct Runner,如果您未指定執行器,則 Direct Runner 是預設執行器。Direct Runner 會在本機電腦上執行管道。它適用於測試和開發,而不是針對效率進行最佳化。如需詳細資訊,請參閱使用 Direct Runner

對於生產工作負載,您通常會使用分散式執行器,在 Apache Flink、Apache Spark 或 Google Cloud Dataflow 等巨量資料處理系統上執行管道。這些系統支援大規模平行處理。

後續步驟

如果您遇到任何問題,請隨時與我們聯絡