我想使用SqlContext将月份添加到日期

时间:2016-06-21 05:29:11

标签: scala apache-spark

'的 01-FEB-2013 '这是我的约会对象。我怎样才能得到结果为2013年3月1日?

SELECT DATE_ADD( '2011-01-01', INTERVAL 1 month );

这可以通过mySql实现。我希望在scala中使用sqlContext的结果是否可能?

1 个答案:

答案 0 :(得分:5)

您需要使用org.apache.spark.sql.functions.add_months

def add_months(startDate: Column, numMonths: Int): Column
"Returns the date that is numMonths after startDate."

以下是其用法示例:

scala> val df = sc.parallelize((0 to 6).map(i => 
       {now.setMonth(i); (i, new java.sql.Date(now.getTime))}).toSeq)
       .toDF("ID", "Dates")
df: org.apache.spark.sql.DataFrame = [ID: int, Dates: date]

scala> df.show
+---+----------+
| ID|     Dates|
+---+----------+
|  0|2016-01-21|
|  1|2016-02-21|
|  2|2016-03-21|
|  3|2016-04-21|
|  4|2016-05-21|
|  5|2016-06-21|
|  6|2016-07-21|
+---+----------+

scala> df.withColumn("New Dates", add_months(df("Dates"),1)).show
+---+----------+----------+
| ID|     Dates| New Dates|
+---+----------+----------+
|  0|2016-01-21|2016-02-21|
|  1|2016-02-21|2016-03-21|
|  2|2016-03-21|2016-04-21|
|  3|2016-04-21|2016-05-21|
|  4|2016-05-21|2016-06-21|
|  5|2016-06-21|2016-07-21|
|  6|2016-07-21|2016-08-21|
+---+----------+----------+