Databricks中用Scala将最新年月加1并存为变量的实现方法
问题根因
你当前代码中直接将spark.sql()执行结果赋值给yearmonth,但该方法返回的是DataFrame对象,而非查询得到的年月字符串值,因此无法直接作为变量赋值给Spark配置。
修正后的完整代码
%scala import java.time.YearMonth import java.time.format.DateTimeFormatter val sourceID = dbutils.widgets.get("sourceID") val split_val = sourceID.split(",") val sourceIDs = split_val(0) val measure = split_val(1) // 1. 查询最大月份并取出字符串值 val maxMonthStr = spark.sql(""" SELECT MAX(snapshot_month) as max_month FROM curated_ga.f_clm_segments_raw """) .first() .getString(0) // 2. 定义年月格式,加1个月 val ymFormatter = DateTimeFormatter.ofPattern("yyyy-MM") val maxMonth = YearMonth.parse(maxMonthStr, ymFormatter) val nextMonth = maxMonth.plusMonths(1) val yearmonth = nextMonth.format(ymFormatter) // 3. 赋值给Spark配置 sql(s"set acquisition_channel = $acquisition_channel") sql(s"set sourceIDs = $sourceIDs") sql(s"set measure = $measure") sql(s"set yearmonth = $yearmonth")
注意事项
- 如果你的表可能为空,建议对
first()的结果做非空判断,避免空指针异常 - 此处用
YearMonth类处理年月逻辑,天然支持跨年场景(比如2021-12加1个月会自动得到2022-01)
内容的提问来源于stack exchange,提问作者Roho
相关产品推荐
相关产品推荐

