在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?

在单元格中将日期格式化为 yyyy-mm-dd

在 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”

将数据框日期列的 dd-mm-yyyy 日期格式更改为 yyyy-mm-dd [重复]