簡體   English   中英

將天數列添加到 Spark Scala 應用程序的同一數據框中的日期列

[英]Add Number of days column to Date Column in same dataframe for Spark Scala App

我有一個dataframe df columns ("id", "current_date", "days") ,我正在嘗試將“ days ”添加到“ current_date ”並使用 spark scala 創建一個帶有名為“ new_date ”的新column的新dataframe new_date函數date_add()

val newDF = df.withColumn("new_Date", date_add(df("current_date"), df("days").cast("Int")))

但看起來函數date_add只接受Int值而不接受columns 在這種情況下如何獲得所需的輸出? 我可以使用任何替代功能來獲得所需的輸出嗎?

火花版本:1.6.0 Scala 版本:2.10.6

無需使用 UDF,您可以使用 SQL 表達式來完成:

val newDF = df.withColumn("new_date", expr("date_add(current_date,days)"))

一個小的自定義 udf 可用於使此日期算術成為可能。

import org.apache.spark.sql.functions.udf
import java.util.concurrent.TimeUnit
import java.util.Date
import java.text.SimpleDateFormat    

val date_add = udf((x: String, y: Int) => {
    val sdf = new SimpleDateFormat("yyyy-MM-dd")
    val result = new Date(sdf.parse(x).getTime() + TimeUnit.DAYS.toMillis(y))
  sdf.format(result)
} )

用法

scala> val df = Seq((1, "2017-01-01", 10), (2, "2017-01-01", 20)).toDF("id", "current_date", "days")
df: org.apache.spark.sql.DataFrame = [id: int, current_date: string, days: int]

scala> df.withColumn("new_Date", date_add($"current_date", $"days")).show()
+---+------------+----+----------+
| id|current_date|days|  new_Date|
+---+------------+----+----------+
|  1|  2017-01-01|  10|2017-01-11|
|  2|  2017-01-01|  20|2017-01-21|
+---+------------+----+----------+

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM