[英]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.