【发布时间】:2021-12-14 18:18:48
【问题描述】:
我正在尝试将包含多个值的表格行转换为 KV。我可以在 DoFn 中实现这一点,但这会增加我想要进一步编写的代码的复杂性,并使我的工作更加困难。 (基本上我需要对tablerow的两个pcollections执行CoGroupBy操作)
有什么方法可以将 PCollection 转换为 PCollection
我写了一个看起来像这样的 sn-p,但这并没有给我想要的结果,有什么方法可以加载 tablerow 中的所有条目并生成具有这些值的 KV?
ImmutableList<TableRow> input = ImmutableList.of(new TableRow().set("val1", "testVal1").set("val2", "testVal2").set("val3", "testVal3");
PCollection<TableRow> inputPC = p.apply(Create.of(input));
inputPC.apply(MapElements.into(TypeDescriptors.kvs(TypeDescriptors.strings(), TypeDescriptors.strings()))
.via(tableRow -> KV.of((String) tableRow.get("val1"), (String) tableRow.get("val2"))));
【问题讨论】:
-
Beam 并没有任何内置的方法来转换 TableRow,因为这是一种基本上只在读取和写入 BigQuery 时使用的数据类型。出于这个原因,几乎所有涉及 TableRows 的问题的解决方案都需要编写一个 DoFn。您能否说明一下您当前的 DoFn 解决方案的功能以及您对它不满意的原因?
-
我想对从数据流中的两个 bq 表中提取的数据执行连接操作,我无法通过查询直接实现这一点,因为我将动态获取表名。我是 beam 的初学者,所以我正在探索将 tablerow 转换为 KV
的方法,但文档没有任何有用的东西,现在我已经在我的 DoFn 中硬编码了一些值来实现这一点,但这并不理想。
标签: google-cloud-platform google-cloud-dataflow apache-beam dataflow beam-sql