【问题标题】:Increment month column by 1 and store in scala variable将月份列增加 1 并存储在 scala 变量中
【发布时间】:2021-11-22 06:08:28
【问题描述】:

我有一个按月计算的天气历史数据表。

Bangalore   27      65          2021-04
Chennai     30      85          2021-04
Mumbai      31      84          2021-04
Bangalore   27      65          2021-05
Chennai     30      85          2021-05
Mumbai      31      84          2021-05
Bangalore   26      62          2021-06
Chennai     31      88          2021-06
Mumbai      32      89          2021-06

我正在使用 Databricks...我想查看最近上传的月份数据。 (上述情况为2021-06)

这样做的原因是我可以增加年月并摄取下个月的数据。 (示例:2021-06 应递增为 2021-07)

我将在下面的 scala 代码中使用这个参数 yearmonth,稍后将用于提取数据。

%scala
import java.time.LocalDateTime
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)
val yearmonth = spark.sql(""" SELECT MAX(snapshot_month) FROM curated_ga.f_clm_segments_raw """)

sql(s"set acquisition_channel = $acquisition_channel")
sql(s"set sourceIDs = $sourceIDs")
sql(s"set measure = $measure")
sql(s"set yearmonth = $yearmonth")

并得到输出:

sourceID: String = 156,ppg
split_val: Array[String] = Array(156, ppg)
sourceIDs: String = 156
measure: String = ppg
yearmonth: org.apache.spark.sql.DataFrame = [max(snapshot_month): string]
acquisition_channel: String = acquisition_channel in ('01','02')
res25: org.apache.spark.sql.DataFrame = [key: string, value: string]

无论如何我可以获得最新的月份,将其增加 1,以便它引用下个月......并将该值存储为 yearmonth。 示例 2021-06 应递增到 2021-07 并存储到 yearmonth。

【问题讨论】:

  • “将该值存储为年月”是什么意思?您是否在数据集中添加了“年月”列?或者你想要一个本地 scala 变量?

标签: sql scala apache-spark databricks


【解决方案1】:

您可以在 Scala 中使用日期函数来处理您的列并增加它。在本例中,我使用了to_dateadd_monthsdate_format 来实现结果:

单元格 1

// Assign sample data to dataframe
val df = Seq(
    ( "example1", "1999-12" ),
    ( "example2", "2000-02" ),
    ( "example3", "2000-10" )
    ).
    toDF("country", "yearmonth")

单元格 2

val df2 = df.
    withColumn("yearMonthToDate", to_date($"yearmonth")).
    withColumn("working1", expr("add_months(yearMonthToDate, 1)")).
    withColumn("working2", date_format($"working1", "yyyy-MM")).
    withColumn("allTogether", date_format(add_months(to_date($"yearmonth"),1), "yyyy-MM"))

df2.show

我的结果:

NB 在 Spark SQL 中可以使用相同的功能:

SELECT *, date_format(add_months(to_date(yearmonth),1),'yyyy-MM') x
FROM tmp

我无法完全按照您的代码进行操作,但获得此类问题答案的最佳方法是创建一个 minimal reproducible example,因为我只有三条记录,一条显示年份变化,另外两条只显示显示月份递增,而不是整个产品代码。

【讨论】:

  • 这有什么更新吗?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
  • 2012-05-25
  • 1970-01-01
  • 2020-09-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多