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