我的Spark作业将结果写入一个S3 bucket,我需要将此数据复制到另一个S3 bucket并重命名文件。我应该构建什么样的正则表达式才能以所需的格式重命名文件?我复制文件的路径是:s3://test-bucket/qa/snapshot/processing_time=1385351/id=5721/name=sport/part-e34jt-5a9ghej-fh7r-4710-ghds31o.c000.csv
我希望看到的最终路径:s3://prod-bucket/results/processing_time=1385351/id=5721/sport.csv
这是我目前构建路径的方式,但我需要调整这个正则表达式,以便能够重命名文件:
val destBasePath = "s3://prod-bucket/results"
val segmentAndNameRx = """s3.*/(\d*/.*csv)""".r
fullSourcePath match {
case segmentAndNameRx(segmentAndName) => {
val path = s"${destBasePath.stripSuffix("/")}/$segmentAndName"
Some(path)
}
case _ => None
}
这里的fullSourcePath是源存储桶中每个文件的路径。上面的例子。我在Scala中使用AWS SDK客户端来实现这个/
1条答案
按热度按时间rsl1atfo1#
您可以用途:
它只是匹配一些数字和最后一部分
([^/]+)
直到/
。第1组将包含processing_time
数字,第2组id
数字和第3组name
字符。然后,您可以使用
findFirstMatchIn
来获取匹配的组并基于它们构造路径。请注意,只有当顺序总是相同时,这才有效,但在这样的URL中通常是这样的。