Apache Spark – 添加两列

有没有办法添加两列,以便第一列是日期,第二列包含需要添加的天数? 我尝试着

date_add(res.col("date"), res.col("days")); 

但这不起作用,因为date_add()需要一个Column和一个int ,而我有两列。

谢谢!

这是DataFrame DSL的限制, DataFrame不是引擎本身。 它不是最佳的,但你可以用expr替换函数调用:

 import org.apache.spark.sql.functions.{expr, col} val df = Seq(("2012-04-05", 6)) .toDF("date", "days") .withColumn("date", col("date").cast("date")) df.select(expr("date_add(date, days)")) 

以下是使用UDF的解决方案:请参阅udfDateAdd()以下函数定义

这里不能使用sql函数date_add():java.sql.Date首先转换为LocalDate(java8),在此之后添加,然后再转换回java.sql.Date:

 import java.sql.Date import java.time.LocalDate; // sample data val df = Seq(("2015-02-21", 8), ("2016-02-21", 8)).toDF("date", "days"). withColumn("date", col("date").cast("date")) val udfDateAdd=udf[Date,Date,Int]{ (dt,inc) => java.sql.Date.valueOf( dt.toLocalDate().plusDays(inc) ) } 

结果:

 df.withColumn("newdate", udfDateAdd($"date",$"days")).show() +----------+----+----------+ | date|days| newdate| +----------+----+----------+ |2015-02-21| 8|2015-03-01| |2016-02-21| 8|2016-02-29| +----------+----+----------+