scala - 如何将自定义日期时间格式转换为时间戳?

标签 scala apache-spark apache-spark-sql

知道为什么我会得到下面的结果吗?

scala> val b = to_timestamp($"DATETIME", "ddMMMYYYY:HH:mm:ss")
b: org.apache.spark.sql.Column = to_timestamp(`DATETIME`, 'ddMMMYYYY:HH:mm:ss')

scala> sourceRawData.withColumn("ts", b).show(6,false)
+------------------+-------------------+-----------+--------+----------------+---------+-------------------+
|DATETIME          |LOAD_DATETIME      |SOURCE_BANK|EMP_NAME|HEADER_ROW_COUNT|EMP_HOURS|ts                 |
+------------------+-------------------+-----------+--------+----------------+---------+-------------------+
|01JAN2017:01:02:03|01JAN2017:01:02:03 | RBS       | Naveen |100             |15.23    |2017-01-01 01:02:03|
|15MAR2017:01:02:03|15MAR2017:01:02:03 | RBS       | Naveen |100             |115.78   |2017-01-01 01:02:03|
|02APR2015:23:24:25|02APR2015:23:24:25 | RBS       |Arun    |200             |2.09     |2014-12-28 23:24:25|
|28MAY2010:12:13:14| 28MAY2010:12:13:14|RBS        |Arun    |100             |30.98    |2009-12-27 12:13:14|
|04JUN2018:10:11:12|04JUN2018:10:11:12 |XZX        | Arun   |400             |12.0     |2017-12-31 10:11:12|
+------------------+-------------------+-----------+--------+----------------+---------+-------------------+

我正在尝试将 DATETIME(采用 ddMMMYY:HH:mm:ss 格式)转换为时间戳(显示在上面最后一列中),但它似乎没有转换为正确的值。 我引用了以下帖子但没有帮助:

Better way to convert a string field into timestamp in Spark

谁能帮帮我?

最佳答案

使用 y(年)而不是 Y(星期年):

spark.sql("SELECT to_timestamp('04JUN2018:10:11:12', 'ddMMMyyyy:HH:mm:ss')").show
// +--------------------------------------------------------+
// |to_timestamp('04JUN2018:10:11:12', 'ddMMMyyyy:HH:mm:ss')|
// +--------------------------------------------------------+
// |                                     2018-06-04 10:11:12|
// +--------------------------------------------------------+

另一个例子:

scala> sql("select to_timestamp('12/08/2020 1:24:21 AM', 'MM/dd/yyyy H:mm:ss a')").show
+-------------------------------------------------------------+
|to_timestamp('12/08/2020 1:24:21 AM', 'MM/dd/yyyy H:mm:ss a')|
+-------------------------------------------------------------+
|                                          2020-12-08 01:24:21|
+-------------------------------------------------------------+

关于scala - 如何将自定义日期时间格式转换为时间戳?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47854567/

相关文章:

scala - 在 Spark 中使用自定义函数聚合多列

scala - 如何为 scala Iterable、spark 数据集制作编码器

scala - 为什么我不能将 map 向下转换为键是原始 map 键的子类型的类型

hadoop - 在具有 JSON 数据的 Parquet 文件上创建 Hive 表

apache-spark - Spark 和分析或执行计划

scala - Spark SQL 中的 Where 子句与 join 子句

scala - 在Play中定义全局变量的最佳方法! 2.0应用

performance - 'hash cons' 是什么意思?

java - 获取 Spark 包时如何禁用 SSL 身份验证?

scala - Spark Scala:无法导入sqlContext.implicits._