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

标签 scala apache-spark dataframe dateadd

我有一个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/

相关文章:

java - Spark运行时错误: spark.metrics.sink.MetricsServlet无法实例化

python - 更改数据框日期列的日期格式

python - 如何将 numpy 数组和索引数组映射到 pandas 数据框?

c# - 可选引用文献类型

scala - 在 Scala 中如何编写 init 函数?

scala - 通过文本文件序列化保留Spark分区顺序

scala - 如何在 spark scala 的微风矩阵数组中找到相同单元格的平均值?

javascript - Scala Play - 如何将 Scala 字符串列表转换为 javascript 字符串数组(避免 "问题)?

java - 使用 Apache Spark 迭代并展平数据集中的结构类型数组 :Java

r - cast 函数非常耗内存,如何处理?