【发布时间】:2021-07-22 01:41:53
【问题描述】:
我有一个大型数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建我的 PCollection 以导出到 BigQuery 时,我想确保我不会基于此键值导入重复记录。使用 Dataflow 在我的 Java 程序中执行此操作的最有效方法是什么?
谢谢
【问题讨论】:
我有一个大型数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建我的 PCollection 以导出到 BigQuery 时,我想确保我不会基于此键值导入重复记录。使用 Dataflow 在我的 Java 程序中执行此操作的最有效方法是什么?
谢谢
【问题讨论】:
Dataflow 中的 GroupByKey 概念允许任意分组,可用于从 PCollection 中删除重复键。
解决这个问题最通用的方法是:
其中一些步骤可能是 省略,如果您正在解决泛型的特定特殊情况 问题。
特别是,如果将整条记录视为一个键,则可以将问题简化为仅运行 Count 转换并迭代生成的 PCollection。
下面是 GroupByKey 的大致代码示例:
PCollection<KV<String, Doc>> urlDocPairs = ...;
PCollection<KV<String, Iterable<Doc>>> urlToDocs =
urlDocPairs.apply(GroupByKey.<String, Doc>create());
PCollection<KV<String, Doc>> results = urlToDocs.apply(
ParDo.of(new DoFn<KV<String, Iterable<Doc>>, KV<String, Doc>>() {
public void processElement(ProcessContext c) {
String url = c.element().getKey();
Iterable<Doc> docsWithThatUrl = c.element().getValue();
// return a pair of url and an element from Iterable<Doc>.
}}));
【讨论】:
【讨论】: