【问题标题】:Apache Beam TextIO PCollection of files instead of linesApache Beam TextIO PCollection 文件而不是行
【发布时间】:2018-10-16 21:40:19
【问题描述】:

使用 Apache Beam Java SDK 2.1.0

我们在 Google Cloud 存储桶中有多个错误日志,我们正在读取此路径中的所有文件,使用 TextIO.read

我们需要对它们进行聚合,以便发现正在发送的消息中的错误。我们有一个可以工作的正则表达式,从每个文件中过滤不同的行,问题是TextIO.read 的性质我们得到一个PCollection 行,所以当尝试在pardo 中应用正则表达式时,它会处理它一行一行,正则表达式永远找不到匹配项。

正则表达式:"MESSAGE:(.*)\\n\\[MESSAGE\\].*(\\\"entityName\\\":\\\"\\w+\\\")"

TextIO.read 是否会返回 PCollection 的文件,每个元素一个文件,所以当它获得 parDo 时,我们可以访问完整的元素?

作为 b 计划,有没有办法使用 Apache Beam 将每个文件的所有行合并为一个,因此正则表达式模式有效?

public static class ExtractWordsFn extends DoFn<String, String> {

    @ProcessElement
    public void processElement(ProcessContext c) {
        final String regex = "MESSAGE:(.*)\\n\\[MESSAGE\\].*(\\\"entityName\\\":\\\"\\w+\\\")";
        final Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE | Pattern.UNICODE_CASE);
        Matcher m = pattern.matcher(c.element());
        List<String> entities = new ArrayList<String>();
        while (m.find()) {
            System.out.println("Full match: " + m.group(0));
            for (int i = 1; i <= m.groupCount(); i++) {
                entities.add(m.group(i));
            }
        }

        // Output each word encountered into the output PCollection.
        for (String entity : entities) {
            c.output(entity);
        }
    }
}

【问题讨论】:

    标签: regex google-cloud-dataflow apache-beam


    【解决方案1】:

    TextIO.readAll(),在 Beam 2.2 中可用(目前正在发布,但您已经可以从快照版本使用它或从 github 构建),读取文件模式或文件名的 PCollection

    【讨论】:

    • 谢谢,可以从 Google Cloud Dataflow 使用它吗?
    • 是的,Apache Beam 适用于 Dataflow 的 SDK。只需按照通常的方式在 Beam 管道中指定数据流运行器即可。
    • 感谢您的回答,但没有设法使其工作,克隆 Beam 2.2 和 Dataflow 2.2 在尝试运行 mvn install 时出现几个错误,甚至尝试不同的分支,我最终创建了一个 python脚本
    • 好的。我建议在 Beam 2.2 发布后重试(一些困难一直在推迟发布,但您可以在 Beam dev@ 邮件列表lists.apache.org/list.html?dev@beam.apache.org 上关注它)
    • 我回来了,我正在尝试 TextIO.readAll(),但我无法真正理解如何使用它,我应该如何将路径传递给 readAll()?我需要从谷歌云中的存储桶中读取所有文件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-31
    • 1970-01-01
    • 2018-05-16
    • 2023-02-03
    • 2022-08-16
    相关资源
    最近更新 更多