Spark SQL将字符串转换为时间戳

时间:2017-08-08 02:46:21

标签: sql apache-spark apache-spark-sql pyspark-sql

我是Spark SQL的新手,我正在尝试将字符串转换为spark数据框中的时间戳。我在名为time_string

的列中有一个类似<div id="navbar_template"></div> <div class="setting-container"> <div class="setting-topnav"> <a>Setting / Basic Configuration<a> </div> <div class="setting-title"> <a>Basic Configuration<a> </div> </div> 的字符串

我将此字符串转换为时间戳的代码是

'2017-08-01T02:26:59.000Z'

但这给了我一个CAST (time_string AS Timestamp)

的时间戳

为什么要改变时间?有没有办法在不改变时间的情况下做到这一点?

感谢您的帮助!

3 个答案:

答案 0 :(得分:17)

您可以使用unix_timestamp函数将utc格式的日期转换为时间戳

val df2 = Seq(("a3fac", "2017-08-01T02:26:59.000Z")).toDF("id", "eventTime")

df2.withColumn("eventTime1", unix_timestamp($"eventTime", "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'").cast(TimestampType))

输出:

+-------------+---------------------+
|userid       |eventTime            |
+-------------+---------------------+
|a3fac        |2017-08-01 02:26:59.0|
+-------------+---------------------+

希望这有帮助!

答案 1 :(得分:1)

Java解决方案

有一些Spark SQL函数可以让您使用日期格式播放。

转换示例: 20181224091530 -> 2018-12-24 09:15:30

解决方案(Spark SQL语句):

SELECT
 ...
 to_timestamp(cast(DECIMAL_DATE as string),'yyyyMMddHHmmss') as `TIME STAMP DATE`,
 ...
FROM some_table

您可以通过使用 org.apache.spark.sql.SparkSession 的实例来使用SQL语句。例如,如果要执行sql语句,Spark提供以下解决方案:

...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement); 
...

注释:

  • 您必须将小数转换为字符串,然后才能将其解析为时间戳格式
  • 您可以按自己喜欢的格式播放get ......

答案 2 :(得分:1)

  1. 在 spark sql 中,您可以使用 to_timestamp 然后将其格式化为您的要求。 选择 date_format(to_timestamp(,'yyyy/MM/dd HH:mm:ss'),"yyyy-MM-dd HH:mm:ss") as 来自

  2. 此处的“时间戳”值为 2019/02/23 12:00:00,它是“事件”表中的 StringType 列。 转换成 TimestampType 应用 to_timestamp(timestamp, 'yyyy/MM/dd HH:mm:ss)。需要确保时间戳的格式与您的列值相同。然后您应用 date_format 以根据您的要求进行转换。

> 选择 date_format(to_timestamp(timestamp,'yyyy/MM/dd HH:mm:ss'),"yyyy-MM-dd HH:mm:ss") 作为事件的时间戳< /p>