ene-2021)?

pdsfdshx  于 2021-07-13  发布在  Spark
关注(0)|答案(2)|浏览(253)

我有一个文件,其中日期作为字符串导入,格式如下: 14-ENE-2021 西班牙日期(ene=1月)。我需要将其转换为单Sparksql查询中的日期。到目前为止,我已经尝试了: spark.sql("select TO_DATE('14-ENE-21', 'dd-MMM-yy')").show() 返回null。

ou6hu8tu

ou6hu8tu1#

这是个棘手的问题,但你可以用 from_csv 要设置区域设置:

spark.sql("""
    select from_csv(
        '14-ENE-21',
        'date date',
        map('dateFormat', 'dd-MMM-yy', 'locale', 'ES')
    ).date as date
""").show()
+----------+
|      date|
+----------+
|2021-01-14|
+----------+

(灵感来源于文档)

6rqinv9w

6rqinv9w2#

您可以注册自定义 toDate 自定义项如下:

import java.text.SimpleDateFormat
import java.util.Locale

spark.udf.register("toDate", (value: String, pattern: String, locale: String) => {
    try {
      val parser = new SimpleDateFormat(pattern, new Locale(locale))
      val formatter = new SimpleDateFormat("yyyy-MM-dd", Locale.US)
      Some(new java.sql.Date(parser.parse(value.trim).getTime))
    } catch {
      case _: Exception => None
    }
  }
)

spark.sql("select toDate('14-ENE-21', 'dd-MMM-yy', 'ES') as date").show()

//+----------+
//|      date|
//+----------+
//|2021-01-14|
//+----------+

相关问题