问题描述
因此,我在 Spark 中使用类型安全配置文件 application.properties
从外部读取参数。我的输入和输出路径是这样指定的:
dev.input.base.dir = s3://inp_bucket/my_dir/2021/03/21/00/
dev.output.base.dir = s3://oup_bucket/my_dir/2021/03/21/00/
现在这段代码应该每天运行,而且每天都必须处理上一个日期。所以基本上,我想用 2021/03/21
替换路径中的 current_date()-1
。我如何实现这一目标?
如果在类型安全配置中无法实现,我可以在读取字符串后在 Scala
中实现吗?
解决方法
如果您的路径是字符串,您可以使用正则表达式将其分解,然后使用 Date 减去您需要的天数
下面的快速示例:
val myPathAsString = "s3://input_bucket/my_dir/2021/03/21/00"
val pathPattern = """(\w*:\/\/\w*\/\w*)\/(\d{4}\/\d{2}\/\d{2})\/(\w*)""".r
val dateFormat = "yyyy/MM/dd"
val dtf = java.time.format.DateTimeFormatter.ofPattern(dateFormat)
myPathAsString match {
case pathPattern(prev,date,suffix) => {
val newDate = java.time.LocalDate.parse(date,dtf).minusDays(1)
s"$prev/${newDate.format(dtf)}/$suffix"
}
case _ => myPathAsString
}