我有一个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
...
我想仅使用Scio中的dt=2017-12-02
和dt=2017-12-03
匹配sc.textFile()
下的文件,据我所知,它使用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
执行此操作的有效文件模式应该是什么?
答案 0 :(得分:1)
您需要使用读取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))
答案 1 :(得分:1)