Scala 我想使用SqlContext将月份添加到日期
“01-FEB-2013”这是我的约会。如何获得2013年3月1日的结果Scala 我想使用SqlContext将月份添加到日期,scala,apache-spark,Scala,Apache Spark,“01-FEB-2013”这是我的约会。如何获得2013年3月1日的结果 选择日期添加('2011-01-01',间隔1个月) mySql可以实现这一点。我希望在scala中使用sqlContext可以得到结果吗?您需要使用org.apache.spark.sql.functions.add\u months: def add_months(startDate: Column, numMonths: Int): Column "Returns the date that is numMonths
选择日期添加('2011-01-01',间隔1个月)代码>
mySql可以实现这一点。我希望在scala中使用sqlContext可以得到结果吗?您需要使用org.apache.spark.sql.functions.add\u 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|
+---+----------+----------+
您需要使用org.apache.spark.sql.functions.add\u 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|
+---+----------+----------+
没问题,如果您认为此答案有用,请确认我的数据是否为2016-02年2月的格式,并且需要更改为2016-02年3月。那么如何解决呢?是日期字符串还是java.sql.Date
对象?如果您对字符串到日期的转换有疑问,请开始查找。如果你被卡住了,你可以在这里问一个新问题(我可以帮你)。如果此当前答案满足您当前的问题,请接受。好的,埃文,我尝试了一个查询,如“从unix时间(unix时间戳)(添加月份(从unix时间戳('2015-JAN-01','yyyy-MMM-dd'),'yyyy-MM-dd'),1),'yyyy-MM-dd'),'yyyy-MMM-dd');它可以工作。@Ajith如果我的答案满足您的问题,请接受。没问题,如果您发现此答案有用,请确认我的数据格式为2016-02年2月。并且需要更改为2016-02年3月。那么如何解决呢?是日期字符串还是java.sql.Date
对象?如果您对字符串到日期的转换有疑问,请开始查找。如果你被卡住了,你可以在这里问一个新问题(我可以帮你)。如果此当前答案满足您当前的问题,请接受它。好的,evan我尝试了一个查询,如“从unix时间(unix时间戳)(添加月份(从unix时间戳('2015-JAN-01','yyyy-MMM-dd'),'yyyy-MM-dd'),1),'yyyy-MM-dd'),'yyyy-MMM-dd');”它起作用。@A如果我的答案满足您的问题,请接受它