如何在单个spark sql查询中转换西班牙日期(14-ENE-2021) ?



我有一个文件,其中的日期以字符串形式导入,格式如下:

14-ENE-2021

作为西班牙日期(ene = january)。我需要将此转换为单个spark SQL查询中的日期。到目前为止,我已经尝试了:

spark.sql("select TO_DATE('14-ENE-21', 'dd-MMM-yy')").show()

返回null。

这是一个棘手的问题,但您可以使用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|
+----------+

(灵感来自文档)

您可以像这样注册自定义toDateUDF:

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|
//+----------+

相关内容

  • 没有找到相关文章

最新更新