我有一个文件,其中日期作为字符串导入,格式如下: 14-ENE-2021 西班牙日期(ene=1月)。我需要将其转换为单Sparksql查询中的日期。到目前为止,我已经尝试了: spark.sql("select TO_DATE('14-ENE-21', 'dd-MMM-yy')").show() 返回null。
14-ENE-2021
spark.sql("select TO_DATE('14-ENE-21', 'dd-MMM-yy')").show()
ou6hu8tu1#
这是个棘手的问题,但你可以用 from_csv 要设置区域设置:
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| +----------+
(灵感来源于文档)
6rqinv9w2#
您可以注册自定义 toDate 自定义项如下:
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| //+----------+
2条答案
按热度按时间ou6hu8tu1#
这是个棘手的问题,但你可以用
from_csv
要设置区域设置:(灵感来源于文档)
6rqinv9w2#
您可以注册自定义
toDate
自定义项如下: