Maison > Article > développement back-end > Apache Beam a quitté sa participation dans Go
L'éditeur php Xiaoxin est là pour vous présenter la jointure gauche Apache Beam dans le langage Go. Apache Beam est un framework de traitement de données distribué qui fournit un modèle de programmation commun pour exécuter des tâches de traitement par lots et par flux sur différents moteurs de traitement de données distribués. La jointure gauche est une opération de traitement de données courante. Elle peut associer deux ensembles de données selon une certaine clé et renvoyer tous les enregistrements de l'ensemble de données de gauche et les enregistrements correspondants dans l'ensemble de données de droite. Cet article présentera en détail comment utiliser Apache Beam pour effectuer des opérations de jointure gauche en langage Go.
Existe-t-il un moyen simple d'effectuer une jointure gauche de 2 pcollections à l'aide de go ? J'ai trouvé que la connexion SQL n'est disponible qu'en Java.
package main import ( "context" "flag" "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" ) type customer struct { CustID int FName string } type order struct { OrderID int Amount int Cust_ID int } func main() { flag.Parse() beam.Init() ctx := context.Background() p := beam.NewPipeline() s := p.Root() var custList = []customer{ {1, "Bob"}, {2, "Adam"}, {3, "John"}, {4, "Ben"}, {5, "Jose"}, {6, "Bryan"}, {7, "Kim"}, {8, "Tim"}, } var orderList = []order{ {123, 100, 1}, {125, 30, 3}, {128, 50, 7}, } custPCol := beam.CreateList(s, custList) orderPCol := beam.CreateList(s, orderList) // Left Join custPcol with orderPCol // Expected Result // CustID | FName |OrderID| Amount // 1 | Bob | 123 | 100 // 2 | Adam | | // 3 | John | 125 | 100 // 4 | Ben | | // 5 | Jose | | // 6 | Bryan | | // 7 | Kim | 125 | 100 // 8 | Tim | | if err := beamx.Run(ctx, p); err != nil { log.Exitf(ctx, "Failed to execute job: %v", err) } }
Je souhaite rejoindre ces 2 collections et effectuer d'autres opérations. J'ai vu la documentation de cogroupbykey mais je ne peux pas la convertir dans un format que la jointure SQL normale peut faire.
Des suggestions à ce sujet ?
Essayez ceci
type resulttype struct { custid int fname string orderid int amount int } result := beam.pardo(s, func(c customer, iterorder func(*order) bool) resulttype { var o order for iterorder(&o) { if c.custid == o.cust_id { return resulttype{ custid: c.custid, fname: c.fname, orderid: o.orderid, amount: o.amount, } } } return resulttype{ custid: c.custid, fname: c.fname, } }, custpcol, beam.sideinput{input: orderpcol})
Ou si vous souhaitez utiliser cogroupbykey...
custWithKeyPCol := beam.ParDo(s, func(c customer) (int, customer) { return c.CustID, c }, custPCol) orderWithKeyPCol := beam.ParDo(s, func(o order) (int, order) { return o.Cust_ID, o }, orderPCol) resultPCol := beam.CoGroupByKey(s, custWithKeyPCol, orderWithKeyPCol) beam.ParDo0(s, func(CustID int, custIter func(*customer) bool, orderIter func(*order) bool) { c, o := customer{}, order{} for custIter(&c) { if ok := orderIter(&o); ok { fmt.Println(CustID, c.FName, o.OrderID, o.Amount) } fmt.Println(CustID, c.FName) } }, resultPCol)
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!