在scala数据框中将日期格式从MM / dd / yyyy转换为yyyyMMdd [重复]
Posted
技术标签:
【中文标题】在scala数据框中将日期格式从MM / dd / yyyy转换为yyyyMMdd [重复]【英文标题】:convert date format from MM/dd/yyyy to yyyyMMdd in scala dataframe [duplicate] 【发布时间】:2019-07-30 07:12:13 【问题描述】:我对 scala 非常陌生,并在日期格式方面提供帮助。 我有一个数据框:
+-----+----------+----------+-----+
| name| startDate| endDate|price|
+-----+----------+----------+-----+
|steak|01/01/1999|01/01/2000| 150|
|steak|02/02/2000|13/01/2000| 180|
| fish|03/03/2000|12/01/2000| 100|
+-----+----------+----------+-----+
我需要将 enddate 列转换为 yyyyMMdd 格式并需要如下结果:
+-----+----------+----------+-----+
| name| startDate| endDate|price|
+-----+----------+----------+-----+
|steak|01/01/1999|20000101 | 150|
|steak|02/02/2000|20000113 | 180|
| fish|03/03/2000|20000112 | 100|
+-----+----------+----------+-----+
我已尝试以下代码并在 EndDate 列中获得“NULL”
val result = df.withColumn("EndDate",date_format(col("endDate"), "yyyyMMdd")).select("*").show()
谁能帮帮我?
【问题讨论】:
【参考方案1】:适用于 Spark 2.2+
您应该将列转换为DateType
并更改格式如下
df.withColumn("EndDate",
date_format(to_date(col("endDate"),"MM/dd/yyyy"), "yyyyMMdd")
)
为 Spark
使用unix_timestamp
df.withColumn("date",
date_format(unix_timestamp(col("endDate"),"MM/dd/yyyy").cast(TimestampType), "yyyyMMdd")
)
与格式不匹配的返回null
,因为13/01/2000
对格式MM/dd/yyyy
无效,它给你null
【讨论】:
我已经尝试过这个建议,它说方法 to_date 的参数太多:(e: org.apache.spark.sql.Column)org.apache.spark.sql.Column 您能分享一下您是如何使用它的吗? val 结果 = df.select(date_format(to_date(col("enddate"),"MM/dd/yyyy"), "yyyyMMdd")).show 这对我来说看起来很好,你能分享完整的错误吗?还是你导入了import org.apache.spark.sql.functions._
,你用的是什么版本的spark?以上是关于在scala数据框中将日期格式从MM / dd / yyyy转换为yyyyMMdd [重复]的主要内容,如果未能解决你的问题,请参考以下文章
如何在 libreoffice calc 中将日期格式从 MM/DD/YYYY 更改为 DD/MM/YYYY?
在 SSIS 中将日期 DD.MM.YYYY hh:mm:ss 转换为 YYYY-MM-DD
有没有一种简单的方法可以在数据框中隔离 YYYY-MM-DD 格式的给定日期间隔? [复制]
如何在 oracle 中将日期格式从“28-03-18 09:11:34.000000000 PM”转换为“MM-DD-YYYY HH24:MI:SS”