使用数据流删除重复项
Using Dataflow to Remove Duplicates
我有一个大型数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建我的 PCollection 以导出到 BigQuery 时,我想确保我不会导入基于此键值的重复记录。在我使用 Dataflow 的 Java 程序中执行此操作的最有效方法是什么?
谢谢
以下可能值得一看
Dataflow 中的 GroupByKey 概念允许任意分组,可以利用它从 PCollection 中删除重复键。
解决此问题的最通用方法是:
- 从您的源文件中读取,生成输入记录的 PCollection,
- 使用 ParDo 转换来分离键和值,生成
P 的 KV 集合,
- 执行GroupByKey操作
在其上,生成 KV>,
的 PCollection
- 使用 ParDo 转换 select 哪个值映射到给定的键
应该写成,产生 KV 的 PCollection,
- 使用 ParDo 转换格式化写入数据,
- 最后,写
结果到 BigQuery 或任何其他接收器。
其中一些步骤可能是
省略,如果你正在解决泛型的特殊情况
问题。
特别是,如果将整个记录视为一个键,则问题可以简化为 运行 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
我有一个大型数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建我的 PCollection 以导出到 BigQuery 时,我想确保我不会导入基于此键值的重复记录。在我使用 Dataflow 的 Java 程序中执行此操作的最有效方法是什么?
谢谢
以下可能值得一看
Dataflow 中的 GroupByKey 概念允许任意分组,可以利用它从 PCollection 中删除重复键。
解决此问题的最通用方法是:
- 从您的源文件中读取,生成输入记录的 PCollection,
- 使用 ParDo 转换来分离键和值,生成 P 的 KV 集合,
- 执行GroupByKey操作 在其上,生成 KV>, 的 PCollection
- 使用 ParDo 转换 select 哪个值映射到给定的键 应该写成,产生 KV 的 PCollection,
- 使用 ParDo 转换格式化写入数据,
- 最后,写 结果到 BigQuery 或任何其他接收器。
其中一些步骤可能是 省略,如果你正在解决泛型的特殊情况 问题。
特别是,如果将整个记录视为一个键,则问题可以简化为 运行 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