【问题标题】:TextIO.Read GCS folders into pipeline with past 30 days date as nameTextIO.以过去 30 天的日期为名称将 GCS 文件夹读取到管道中
【发布时间】:2017-09-12 03:24:39
【问题描述】:

我想将过去 30 天的滚动窗口读取到我的管道中,例如2017 年 1 月 15 日,我想阅读:

> gs://bucket/20170115/* 
> gs://bucket/20170114/*
>. 
>.
>.
> gs://bucket/20161216/*

This 表示支持 ("*", "?", "[..]") 全局模式

Similar question, but with no good example

我试图避免执行 30 个 Text.IO.Read 步骤,然后将所有 Pcollections 合并为一个,这会导致管道中出现热分片。

【问题讨论】:

    标签: java google-cloud-platform google-cloud-dataflow


    【解决方案1】:

    从 GCS 读取文件时,TextIO 支持与 GCS 相同的通配符模式,如下所述:Wildcard Names

    question you linked 的答案中,第 2 条建议形成少量的球体来代表您的全部范围:

    例如,两个字符范围“23 到 67”是2[3-][3-5][0-9]6[0-7]


    TextIO 还有一个新的 API readAll(),它允许您将输入文件动态指定为数据。这允许您传入所需的确切文件名集:

    private static List<String> generate30DayFileGlobs(DateTime now) {
      // ..
    }
    
    public static void main() {
      Pipeline p = // ..
    
      p.apply(Create.<String>of(generate30DayFileGlobs(DateTime.now())));
       .apply(TextIO.readAll());
    
      // ..
    }
    

    新的TextIO.readAll() API 尚未发布,但您可以通过指定 Beam 工件版本2.2.0-SNAPSHOT 从 master 构建。 2.2.0 版 is in progress 应该会在 9 月的某个时候推出。

    【讨论】:

      【解决方案2】:

      一个 Glob Pattern 生成函数here

      【讨论】:

        猜你喜欢
        • 2018-08-25
        • 1970-01-01
        • 2011-12-26
        • 1970-01-01
        • 2017-03-03
        • 1970-01-01
        • 1970-01-01
        • 2018-02-22
        • 2017-07-06
        相关资源
        最近更新 更多