gpt4 book ai didi

scala - 将Spark Scala App的同一数据框中的“天数”列添加到“日期”列

转载 作者:行者123 更新时间:2023-12-04 13:18:34 26 4
gpt4 key购买 nike

我有一个dataframe columns("id", "current_date", "days") df,我正在尝试将“days”添加到“current_date”,并使用spark scala函数dataframe用新的column创建一个新的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可用于使此日期运算成为可能。

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|
+---+------------+----+----------+

关于scala - 将Spark Scala App的同一数据框中的“天数”列添加到“日期”列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44361332/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com