Spark SQL将字符串转换为时间戳
我是Spark SQL新手,正在尝试在Spark数据帧中将字符串转换为时间戳。我在一个名为time_string的列中有一个字符串,看起来像Spark SQL将字符串转换为时间戳,sql,apache-spark,apache-spark-sql,pyspark-sql,Sql,Apache Spark,Apache Spark Sql,Pyspark Sql,我是Spark SQL新手,正在尝试在Spark数据帧中将字符串转换为时间戳。我在一个名为time_string的列中有一个字符串,看起来像'2017-08-01T02:26:59.000Z' 我将此字符串转换为时间戳的代码是 CAST (time_string AS Timestamp) 但这给了我一个时间戳2017-07-31 19:26:59 为什么要改变时间?有没有办法在不改变时间的情况下做到这一点 谢谢你的帮助 您可以使用函数将utc格式的日期转换为时间戳 val df2 = Seq
'2017-08-01T02:26:59.000Z'
我将此字符串转换为时间戳的代码是
CAST (time_string AS Timestamp)
但这给了我一个时间戳2017-07-31 19:26:59
为什么要改变时间?有没有办法在不改变时间的情况下做到这一点
谢谢你的帮助 您可以使用函数将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|
+-------------+---------------------+
希望这有帮助 基于Java的解决方案 有一些Spark SQL函数可以让您使用日期格式 转换示例:20181224091530->2018-12-24 09:15:30 解决方案(Spark SQL语句): 您可以通过使用org.apache.spark.SQL.SparkSession的实例来使用SQL语句。例如,如果要执行sql语句,Spark提供以下解决方案:
...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement);
...
注意事项:
- 您必须将十进制转换为字符串,然后才能实现对时间戳格式的解析
- 你可以用你想要的格式玩游戏
>选择日期格式(to_timestamp(timestamp,'yyyy/MM/dd HH:MM:ss'),“yyy-MM dd HH:MM:ss”)作为事件的时间戳尝试
unix_timestamp
将其转换为时间戳类型:)另请参见。在Spark 2.3.2
(emr-5.19.0
)中,我可以确认转换(时间字符串作为时间戳)工作正常(没有更改时间)假设小数点后有9位数字,我们真的需要指定ss.ssssss'Z'
?格式字符串可以读取“yyyy-MM-dd't'HH:MM:ss.SSSX”
来解析任何时区,而不仅仅是UTCMy大小写,使用此到时间戳(cast(时间戳为字符串),'yyyyymmddhhmmss'))
输出仅为null,其中作为我的时间戳列的值为2019/08/02 15:00:00
。如果我还遗漏了什么,请告诉我。
...
// You have to create an instance of SparkSession
sparkSession.sql(sqlStatement);
...