我有一个大数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建要导出到 BigQuery 的 PCollection 时,我想确保不会基于此键值导入重复记录。使用 Dataflow 在我的 Java 程序中执行此操作的最有效方法是什么?
谢谢
我有一个大数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建要导出到 BigQuery 的 PCollection 时,我想确保不会基于此键值导入重复记录。使用 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>.
}}));
可以使用 org.apache.beam.sdk.transforms.Reshuffle
https://www.tabnine.com/code/java/classes/org.apache.beam.sdk.transforms.Reshuffle