如何在 Databricks Spark Scala 中使用当月的第一天创建变量?
How to create variable with the first day of current month in Databricks Spark Scala?
在 Databricks 上使用 Spark Scala,我试图创建一个包含当月第一天的变量。
在第一步中,我只获取当前日期,它工作正常:
val current_date = LocalDate.now()
这给了我正确的输出,例如:
current_date: java.time.LocalDate = 2022-05-02
我的问题是当我试图获取当月的第一天时。我试过使用 TemporalAdjuster,但它不起作用。谁能告诉我正确的方法吗?
我尝试过的例子:
val current_month = current_date.temporal(TemporalAdjuster.firstDayOfMonth())
>>> error: value temporal is not a member of java.time.LocalDate
val current_month = current_date.temporal(TemporalAdjuster.firstDayOfMonth())
>>> error: value firstDayOfMonth is not a member of object java.time.temporal.TemporalAdjuster
val current_month = current_date.temporal(TemporalAdjuster.firstDayOfMonth())
val current_month = current_date.with(TemporalAdjuster.firstDayOfMonth())
>>> error: identifier expected but 'with' found.
val current_month = current_date.with(TemporalAdjuster.firstDayOfMonth())
^
最简单的方法是使用 date_trunc
函数将当前日期四舍五入到给定的粒度。要获得第一天,您需要将当前日期 t运行 归类到一个月级别,就像这样(我们需要使用 to_date
因为 date_trunc
returns 时间戳):
to_date(date_trunc( "mon", current_date()))
例如,如果您 运行 它在 Databricks 上如下所示:
display(spark.range(3).withColumn("first_day",
to_date(date_trunc( "mon", current_date()))))
你会得到
我只需要使用方法withDayOfMonth(1)
。括号内的1
表示必须return一个月的第一天。
以下代码有效:
val current_month = LocalDate.now().withDayOfMonth(1)
在 Databricks 上使用 Spark Scala,我试图创建一个包含当月第一天的变量。
在第一步中,我只获取当前日期,它工作正常:
val current_date = LocalDate.now()
这给了我正确的输出,例如:
current_date: java.time.LocalDate = 2022-05-02
我的问题是当我试图获取当月的第一天时。我试过使用 TemporalAdjuster,但它不起作用。谁能告诉我正确的方法吗?
我尝试过的例子:
val current_month = current_date.temporal(TemporalAdjuster.firstDayOfMonth())
>>> error: value temporal is not a member of java.time.LocalDate
val current_month = current_date.temporal(TemporalAdjuster.firstDayOfMonth())
>>> error: value firstDayOfMonth is not a member of object java.time.temporal.TemporalAdjuster
val current_month = current_date.temporal(TemporalAdjuster.firstDayOfMonth())
val current_month = current_date.with(TemporalAdjuster.firstDayOfMonth())
>>> error: identifier expected but 'with' found.
val current_month = current_date.with(TemporalAdjuster.firstDayOfMonth())
^
最简单的方法是使用 date_trunc
函数将当前日期四舍五入到给定的粒度。要获得第一天,您需要将当前日期 t运行 归类到一个月级别,就像这样(我们需要使用 to_date
因为 date_trunc
returns 时间戳):
to_date(date_trunc( "mon", current_date()))
例如,如果您 运行 它在 Databricks 上如下所示:
display(spark.range(3).withColumn("first_day",
to_date(date_trunc( "mon", current_date()))))
你会得到
我只需要使用方法withDayOfMonth(1)
。括号内的1
表示必须return一个月的第一天。
以下代码有效:
val current_month = LocalDate.now().withDayOfMonth(1)