gpt4 book ai didi

scala - 如何在 Cloud Dataflow 中使用 TextIO.Read 匹配多个文件的名称

转载 作者:行者123 更新时间:2023-12-01 15:38:02 26 4
gpt4 key购买 nike

我有一个 gcs 文件夹如下:

gs://<bucket-name>/<folder-name>/dt=2017-12-01/part-0000.tsv
/dt=2017-12-02/part-0000.tsv
/dt=2017-12-03/part-0000.tsv
/dt=2017-12-04/part-0000.tsv
...

我只想使用 sc.textFile()< 匹配 dt=2017-12-02dt=2017-12-03 下的文件 在 Scio 中,据我所知,它在下面使用 TextIO.Read.from()

我试过了

gs://<bucket-name>/<folder-name>/dt={2017-12-02,2017-12-03}/*.tsv

gs://<bucket-name>/<folder-name>/dt=2017-12-(02|03)/*.tsv

两者都匹配零个文件:

INFO org.apache.beam.sdk.io.FileBasedSource - Filepattern gs://<bucket-name>/<folder-name>/dt={2017-12-02,2017-12-03}/*.tsv matched 0 files with total size 0

INFO org.apache.beam.sdk.io.FileBasedSource - Filepattern gs://<bucket-name>/<folder-name>/dt=2017-12-(02|03)/*.tsv matched 0 files with total size 0

这样做的有效文件模式应该是什么?

最佳答案

您需要使用 TextIO.readAll()读取 PCollection<String> 的转换文件模式。通过 Create.of() 显式创建文件模式集合或者你可以使用 ParDo 来计算它.

case class ReadPaths(paths: java.lang.Iterable[String]) extends PTransform[PBegin, PCollection[String]] {
override def expand(input: PBegin) = {
Create.of(paths).expand(input).apply(TextIO.readAll())
}
}

val paths = Seq(
"gs://<bucket-name>/<folder-name>/dt=2017-07-01/part-0000.tsv",
"gs://<bucket-name>/<folder-name>/dt=2017-12-20/part-0000.tsv",
"gs://<bucket-name>/<folder-name>/dt=2018-03-29/part-0000.tsv",
"gs://<bucket-name>/<folder-name>/dt=2018-05-04/part-0000.tsv"
)

import scala.collection.JavaConverters._

sc.customInput("Read Paths", ReadPaths(paths.asJava))

关于scala - 如何在 Cloud Dataflow 中使用 TextIO.Read 匹配多个文件的名称,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48700041/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com