【问题标题】:Using Dataflow to Remove Duplicates使用数据流删除重复项
【发布时间】:2021-07-22 01:41:53
【问题描述】:

我有一个大型数据文件 (1 TB) 的数据要导入 BigQuery。每行包含一个键。在导入数据并创建我的 PCollection 以导出到 BigQuery 时,我想确保我不会基于此键值导入重复记录。使用 Dataflow 在我的 Java 程序中执行此操作的最有效方法是什么?

谢谢

【问题讨论】:

    标签: google-cloud-dataflow


    【解决方案1】:
    【解决方案2】:

    Dataflow 中的 GroupByKey 概念允许任意分组,可用于从 PCollection 中删除重复键。

    解决这个问题最通用的方法是:

    • 从源文件中读取,生成输入记录的 PCollection,
    • 使用 ParDo 变换来分离键和值,产生一个 PC收集KV,
    • 执行 GroupByKey 操作 在它上面,产生一个 KV 的 PCollection>,
    • 使用 ParDo 变换来选择映射到给定键的值 应该编写,产生 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>.
        }}));
    

    【讨论】:

    • 嗨 - 我能够让 RemoveDuplicates 转换正常工作。我想知道让数据流报告被抑制的重复项的数量或作为多输出报告发现为重复项的键会涉及什么?
    【解决方案3】:
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-01
    • 2019-05-12
    • 1970-01-01
    • 2023-03-03
    • 1970-01-01
    相关资源
    最近更新 更多