如何在Spark SQL中将日期格式从字符串(2020年6月24日)更改为Date 24-06-2020?

时间:2020-06-24 16:36:45

标签: pyspark apache-spark-sql databricks

我有一列带有字符串值,例如“ 2020年6月24日”,我想将其转换为日期类型。

当从字符串类型转换为日期类型时,是否可以指定输入和输出日期格式的格式。

2 个答案:

答案 0 :(得分:2)

火花日期格式为 yyyy-MM-dd ,您可以使用 to_date,to_timestamp,from_unixtime + unix_timestamp 函数将字符串更改为日期。

Example:

df.show()
#+-----------+
#|         dt|
#+-----------+
#|24 Jun 2020|
#+-----------+

#using to_date function
df.withColumn("new_format", to_date(col("dt"),'dd MMM yyyy')).show()

#using to_timestamp function
df.withColumn("new_format", to_timestamp(col("dt"),'dd MMM yyyy').cast("date")).show()
#+-----------+----------+
#|         dt|new_format|
#+-----------+----------+
#|24 Jun 2020|2020-06-24|
#+-----------+----------+

df.withColumn("new_format", to_date(col("dt"),'dd MMM yyyy')).printSchema()
#root
# |-- dt: string (nullable = true)
# |-- new_format: date (nullable = true)

答案 1 :(得分:0)

日期的默认日期格式为yyyy-MM-dd-

val df1 = Seq("24 Jun 2020").toDF("dateStringType")
    df1.show(false)
    /**
      * +--------------+
      * |dateStringType|
      * +--------------+
      * |24 Jun 2020   |
      * +--------------+
      */

    // default date format is "yyyy-MM-dd"
    df1.withColumn("dateDateType", to_date($"dateStringType", "dd MMM yyyy"))
      .show(false)
    /**
      * +--------------+------------+
      * |dateStringType|dateDateType|
      * +--------------+------------+
      * |24 Jun 2020   |2020-06-24  |
      * +--------------+------------+
      */

      // Use date_format to change the default date_format to "dd-MM-yyyy"
    df1.withColumn("changDefaultFormat", date_format(to_date($"dateStringType", "dd MMM yyyy"), "dd-MM-yyyy"))
      .show(false)
    /**
      * +--------------+------------------+
      * |dateStringType|changDefaultFormat|
      * +--------------+------------------+
      * |24 Jun 2020   |24-06-2020        |
      * +--------------+------------------+
      */