假设我有一个包含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)