我尝试使用以下
TextIO.Read.from("gs://xyz.abc/xxx_{2017-06-06,2017-06-06}.csv")
这种模式不起作用,因为我得到了
java.lang.IllegalStateException: Unable to find any files matching StaticValueProvider{value=gs://xyz.abc/xxx_{2017-06-06,2017-06-06}.csv}
即使这两个文件确实存在。我尝试使用类似表达式的本地文件
TextIO.Read.from("somefolder/xxx_{2017-06-06,2017-06-06}.csv")
这确实很有效。
我会认为GCS中的各种文件都会得到支持,但不会。这是为什么?在那里完成我正在寻找的东西?
答案 0 :(得分:8)
这可能是另一种选择,除了斯科特的建议以及你对他的回答的评论:
您可以使用要读取的路径定义列表,然后对其进行迭代,以通常的方式创建多个PCollections:
PCollection<String> events1 = p.apply(TextIO.Read.from(path1));
PCollection<String> events2 = p.apply(TextIO.Read.from(path2));
然后创建 PCollectionList :
PCollectionList<String> eventsList = PCollectionList.of(events1).and(events2);
然后将此列表展平到您的主要输入的PCollection中:
PCollection<String> events = eventsList.apply(Flatten.pCollections());
答案 1 :(得分:2)
全球模式在Google云端存储与本地文件系统中的工作方式略有不同。 Apache Beam的TextIO.Read
转换将遵循底层文件系统来解释glob。
记录了GCS glob通配符模式here (Wildcard Names)。
在上述情况中,您可以使用:
TextIO.Read.from("gs://xyz.abc/xxx_2017-06-*.csv")
但请注意,这还包括任何其他匹配文件。
答案 2 :(得分:-3)
您是否尝试过Apache Beam TextIO.Read from
功能? Here,它表示也可以使用gcs:
public TextIO.Read from(java.lang.String filepattern)
Reads text files that reads from the file(s) with the given filename or filename pattern. This can be a local path (if running locally), or a Google Cloud Storage filename or filename pattern of the form "gs://<bucket>/<filepath>" (if running locally or using remote execution service).
Standard Java Filesystem glob patterns ("*", "?", "[..]") are supported.