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

Jes*_*ica 16 sql apache-spark apache-spark-sql pyspark-sql

我是Spark SQL的新手,我正在尝试将字符串转换为spark数据框中的时间戳.我有一个'2017-08-01T02:26:59.000Z'名为time_string的列中的字符串

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

CAST (time_string AS Timestamp)
Run Code Online (Sandbox Code Playgroud)

但这给了我一个时间戳 2017-07-31 19:26:59

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

谢谢你的帮助!

Sha*_*ala 20

您可以使用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))
Run Code Online (Sandbox Code Playgroud)

输出:

+-------------+---------------------+
|userid       |eventTime            |
+-------------+---------------------+
|a3fac        |2017-08-01 02:26:59.0|
+-------------+---------------------+
Run Code Online (Sandbox Code Playgroud)

希望这可以帮助!

  • 您的格式字符串可以读取为““ yyyy-MM-dd'T'HH:mm:ss.SSSX”`以解析任何时区,而不仅仅是UTC (2认同)

Rzv*_*van 7

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
Run Code Online (Sandbox Code Playgroud)

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

...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement); 
...
Run Code Online (Sandbox Code Playgroud)

笔记:

  • 您必须将小数转换为字符串,然后才能实现解析为时间戳格式
  • 您可以使用您想要的格式来获取格式...