如何将字符串列(仅包含时间而不包含date的列)转换为spark-scala中的time_stamp?

时间:2019-03-23 08:49:13

标签: scala apache-spark

我需要将仅包含时间作为字符串的列转换为时间戳类型或spark中可用的任何其他时间函数。

下面是带有“ Time_eg”作为字符串列的测试数据帧

Time_eg
12:49:09 AM
12:50:18 AM

将其转换为时间之前的模式

  

Time_eg:字符串(nullable = true)

//Converting to time stamp
val transType= test.withColumn("Time_eg", test("Time_eg").cast("timestamp"))

模式转换为时间戳后,模式为

  

Time_eg:时间戳记(nullable = true)

但是transType.show()的输出为 “ Time_eg”列。

请让我知道如何将仅包含时间作为字符串的列转换为spark scala中的时间戳?

非常感谢有人能帮忙吗?

谢谢

1 个答案:

答案 0 :(得分:1)

您需要使用特定的函数将字符串转换为时间戳,并指定格式。另外,Spark中的时间戳代表一个完整的日期(带有一天中的时间)。如果不提供日期,则将日期设置为1970年1月1日,即unix时间戳记的开始。

根据您的情况,您可以按以下方式转换字符串:

Seq("12:49:09 AM", "09:00:00 PM")
    .toDF("Time_eg")
    .select(to_timestamp('Time_eg, "hh:mm:ss aa") as "ts")
    .show
+-------------------+
|                 ts|
+-------------------+
|1970-01-01 00:49:09|
|1970-01-01 21:00:00|
+-------------------+