ホームページ  >  記事  >  バックエンド開発  >  Go の Apache Beam ParDo フィルター

Go の Apache Beam ParDo フィルター

王林
王林転載
2024-02-05 11:57:58984ブラウズ

Go 中的 Apache Beam ParDo 过滤器

#質問の内容

私は Python 開発者ですが、データ フロー パイプラインを作成するには go を使用する必要があります。 Python や Java に比べて、Go を使用した Apache Beam の例はそれほど多くありません。

ユーザー名と年齢の構造を持つ次のコードがあります。タスクは、年齢を追加し、年齢に基づいてフィルターすることです。 ageを増やす方法を見つけましたが、フィルタリングの部分で行き詰まっています。

リーリー

以下のような関数を作成しようとしましたが、これはユーザーオブジェクトの代わりにブール値を返します。単純な何かが欠けていることはわかっていますが、それを理解できません。

リーリー

Pythonでは以下のような関数を書くことができます。

package main

import (
    "context"
    "flag"
    "fmt"

    "github.com/apache/beam/sdks/v2/go/pkg/beam"
    "github.com/apache/beam/sdks/v2/go/pkg/beam/log"
    "github.com/apache/beam/sdks/v2/go/pkg/beam/x/beamx"
)

func init() {
    beam.registerfunction(incrementage)
}

type user struct {
    name string
    age  int
}

func printrow(ctx context.context, list user) {
    fmt.println(list)
}

func incrementage(list user) user {
    list.age++
    return list
}

func main() {

    flag.parse()
    beam.init()

    ctx := context.background()

    p := beam.newpipeline()
    s := p.root()

    var userlist = []user{
        {"bob", 40},
        {"adam", 50},
        {"john", 35},
        {"ben", 8},
    }
    initial := beam.createlist(s, userlist)

    pc := beam.pardo(s, incrementage, initial)

    pc1 := beam.pardo(s, func(row user, emit func(user)) {
        emit(row)
    }, pc)

    beam.pardo0(s, printrow, pc1)

    if err := beamx.run(ctx, p); err != nil {
        log.exitf(ctx, "failed to execute job: %v", err)
    }

}


正解


ユーザーを起動するには、関数にランチャーを追加する必要があります:

リーリー

現在のコードに書かれているように、

は list.age > 40 を返します。 list.age > 40 最初に true (ブール値) と評価され、そのブール値が返されます。

以上がGo の Apache Beam ParDo フィルターの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はstackoverflow.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。