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

Penapis Apache Beam ParDo dalam Go

王林
Lepaskan: 2024-02-05 11:57:58
ke hadapan
1079 orang telah melayarinya

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

}
Salin selepas log masuk

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    
}
Salin selepas log masuk

Dalam python, saya boleh menulis fungsi seperti di bawah.

beam.Filter(lambda line: line["Age"] >= 40))
Salin selepas log masuk


Jawapan betul


Anda perlu menambah pemancar dalam fungsi untuk melancarkan pengguna:

func filterAge(list user, emit func(user)) {
    if list.Age > 40 {
        emit(list)
    }
}
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan