在Spark Scala中,如何传递日期参数来分解特定的日期范围



假设我有一个包含2列的数据帧"id":字符串和";ds":yyyy-mm-dd形式的字符串。

我试图做的是:给定指定的start_date和end_date,生成日期在这两个日期之间的id和日期组合的所有可能组合,稍后我将填写这些空白日期

现在我的代码就像这个

var tempDf = df.selectExpr("id").distinct().selectExpr("id","explode(sequence(date('2022-04-01'),date('2022-08-01'),INTERVAL 1 DAY)) as ds1")

我的问题是如何使start_date和end_date动态?

我试着先设置start_date和end_date,然后像这样传递,但没有成功。同谋者没有抱怨,它跑了,但什么也没回。感谢的帮助

var tempDf = df.selectExpr("id").distinct().selectExpr("id","explode(sequence(date('{start_date}'),date('{end_date}'),INTERVAL 1 DAY)) as ds1")

@soulmachine的答案是错误的

下面的内容会起作用,原因是字符串替换发生在编译时,为了使其在运行时起作用,请手动替换变量。

val query = s"explode(sequence(date('${start_date}'),date('${end_date}'),INTERVAL 1 DAY)) as ds1".replace("${start_date}", start_date).replace("${end_date}", end_date)

先组成查询字符串,然后将其传递给selectExpr()怎么样?

val start_date = "2022-04-01"
val end_date = "2022-08-01"
val query = s"explode(sequence(date('$start_date'),date('$end_date'),INTERVAL 1 DAY)) as ds1"
var tempDf = df.selectExpr("id").distinct().selectExpr("id", query)

最新更新