java - 如何在 Databricks Spark Scala 中使用当月的第一天创建变量?

标签 java scala apache-spark databricks java-time

在 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 函数将当前日期四舍五入到给定的粒度。要获得第一天,您需要将当前日期截断为一个月级别,如下所示(我们需要使用 to_date 因为 date_trunc 返回时间戳):

to_date(date_trunc( "mon", current_date()))

例如,如果您在 Databricks 上按如下方式运行它:

display(spark.range(3).withColumn("first_day", 
  to_date(date_trunc( "mon", current_date()))))

你会得到

enter image description here

关于java - 如何在 Databricks Spark Scala 中使用当月的第一天创建变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72085981/

相关文章:

java - IP 作为 Linux 数组元素会抛出 UnknownHostException 但作为常量可以正常工作

java - 如何制作仅匹配字母字符的正则表达式?

scala - 创建一个映射来为 Spark Dataframe 的每一行调用 POJO

不使用 "."(点)与使用 "."(点)的 Scala 函数调用

scala - 在 Spark Catalyst 中从一个逻辑计划转换为另一个逻辑计划

Java 将 List<Vehicle> 转换为 List<Object>

java - 如何修复 ic_launcher_foregorund.xml 意外标记和未找到顶级元素

java - Lucidworks 保存 solr 格式未知字段

mysql - 无法使用 jdbc 和 Spark 连接器从 databricks 群集连接到 Azure Database for MySQL 服务器

python - Pyspark 从具有不同列的行/数据创建 DataFrame