【发布时间】:2023-02-03 10:26:04
【问题描述】:
我正在使用 Apache Beam Go SDK 并且很难获得个人收藏以正确的格式进行按键分组/组合。
我在 PCollection 的字符串中每个键有多个记录,如下所示:
Bob, cat
Bob, dog
Carla, cat
Carla, bunny
Doug, horse
我想用GroupByKey和组合键所以我可以像这样汇总每个人的宠物:
Bob, [cat, dog]
Carla, [cat, bunny]
Doug, [horse]
如何将 PCollection<string> 转换为 PCollection<KV<string, string>>?
他们提到了类似here 的东西,但不包括聚合字符串值的代码。
我可以使用 ParDo 获取字符串键和字符串值,如下所示,但我不知道如何转换为 GroupPerKey 输入所需的 KV<string, string> 或 CoGBK<string, string> 格式。
pcolOut := beam.ParDo(s, func(line string) (string, string) {
cleanString := strings.TrimSpace(line)
openingChar := ","
iStart := strings.Index(cleanString, openingChar)
key := cleanString[0:iStart]
value := cleanString[iStart+1:]
// How to convert to PCollection<KV<string, string>> before returning?
return key, value
}, pcolIn)
groupedKV := beam.GroupByKey(s, pcolOut)
它失败并出现以下错误。有什么建议么?
panic: inserting ParDo in scope root
creating new DoFn in scope root
binding fn main.main.func2
binding params [{Value string} {Value string}] to input CoGBK<string,string>
values of CoGBK<string,string> cannot bind to {Value string}
【问题讨论】:
-
我怀疑当您使用 groupedKV 函数时会发生错误。签名应该是
ProcessElement(k string, iter func(*string) bool)(模数,你从中发出的任何东西。)beam.apache.org/documentation/programming-guide/#cogroupbykey 显示了一个带有 cogbk 的示例,但它与 gbk 相同,只有一个迭代器:查看formatCoGBKResults函数
标签: go type-conversion apache-beam key-value