首页 > 解决方案 > 日期转换标量

问题描述

我只想问是否可以在不更改格式的情况下将字符串转换为日期?

 .withColumn("birthdate",when(col("birthday").isNotNull,to_date(col("birthday"),"MM/dd/YYYY")).otherwise(null))

我有一个字符串 "01/01/1990" 但是当我使用 to_date(col("birthday"),"MM/dd/YYYY") 时,它变成了1990-01-01

有没有办法将字符串转换为日期而不改变它的原始格式,或者它只是日期数据类型的格式?

提前谢谢你!

标签: scaladataframeapache-sparkapache-spark-sqlscala-collections

解决方案


默认情况下,spark 使用yyyy-MM-dd日期类型的格式。

如果你想有MM/dd/YYYY格式,date type那么它不可能用火花(结果为空值)。

Example:

Converting MM/dd/YYYY to date type:

scala> spark.sql("select date('01/01/1990') as dt").show()
//+----+
//|  dt|
//+----+
//|null| //result null
//+----+


scala> spark.sql("select date('01/01/1990') as dt").printSchema
//root
 //|-- dt: date (nullable = true)

Converting YYYY-MM-dd to date type:

scala> spark.sql("select date('1990-01-01') as dt").show(false)
//+----------+
//|dt        |
//+----------+
//|1990-01-01| //results data
//+----------+


scala> spark.sql("select date('1990-01-01') as dt").printSchema
//root
// |-- dt: date (nullable = true)

推荐阅读