我是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)
为什么要改变时间?有没有办法在不改变时间的情况下做到这一点?
感谢您的帮助!
答案 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);
...
注释:
答案 2 :(得分:1)
在 spark sql 中,您可以使用 to_timestamp 然后将其格式化为您的要求。 选择 date_format(to_timestamp(,'yyyy/MM/dd HH:mm:ss'),"yyyy-MM-dd HH:mm:ss") as 来自
此处的“时间戳”值为 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>