Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penapis Apache Beam ParDo dalam Go

Penapis Apache Beam ParDo dalam Go

王林
王林ke hadapan
2024-02-05 11:57:581024semak imbas

Go 中的 Apache Beam ParDo 过滤器

Kandungan soalan

Saya seorang pembangun python tetapi harus menggunakan go untuk membuat saluran paip aliran data. Saya tidak dapat menemui banyak contoh rasuk apache menggunakan go berbanding python atau java.

Saya mempunyai kod berikut yang mempunyai struktur nama pengguna dan umur. Tugasnya ialah menambah umur dan kemudian menapis berdasarkan umur. Saya menemui cara untuk meningkatkan umur tetapi saya terperangkap pada bahagian penapisan.

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)
    }

}

Saya cuba mencipta fungsi seperti di bawah, tetapi ini mengembalikan nilai boolean dan bukannya objek pengguna. Saya tahu saya kehilangan sesuatu yang mudah tetapi tidak dapat memahaminya.

func filterage(list user) user {
    return list.age > 40    
}

Dalam python, saya boleh menulis fungsi seperti di bawah.

beam.Filter(lambda line: line["Age"] >= 40))

Jawapan betul


Anda perlu menambah pemancar dalam fungsi untuk melancarkan pengguna:

func filterAge(list user, emit func(user)) {
    if list.Age > 40 {
        emit(list)
    }
}

Seperti yang tertulis dalam kod semasa anda, 返回 list.age > 40 list.age > 40 Mula-mula menilai kepada benar (boolean) dan mengembalikan boolean itu.

Atas ialah kandungan terperinci Penapis Apache Beam ParDo dalam Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam