如何在Scala中将时间戳调整为毫秒?
我有一个dataframe,它有一个列列表;其中一列是长度不同的键时间。我需要在第二部分将所有键的时间长度保持为毫秒,如下所示: 原始键时间列:如何在Scala中将时间戳调整为毫秒?,scala,apache-spark,apache-spark-sql,spark-streaming,Scala,Apache Spark,Apache Spark Sql,Spark Streaming,我有一个dataframe,它有一个列列表;其中一列是长度不同的键时间。我需要在第二部分将所有键的时间长度保持为毫秒,如下所示: 原始键时间列: +--------------------+----------------------+ |account_id |key_time. | +--------------------+----------------------+ |9999999. |2018-07-0
+--------------------+----------------------+
|account_id |key_time. |
+--------------------+----------------------+
|9999999. |2018-07-01 12:32:0424 |
+--------------------+----------------------+
这就是我想要的:
+--------------------+------------------------+
|account_id |key_time. |
+--------------------+------------------------+
|9999999. |2018-07-01 12:32:042400 |
+--------------------+----------------------==+
如果第二部分通过6位,那么我需要将其剪切为6:
+--------------------+------------------------+
|account_id |key_time. |
+--------------------+------------------------+
|9999999. |2018-07-01 12:32:123456 |
+--------------------+----------------------==+
我可以用column(“key_time”,logic(此处))df=df?我是Scala的新手,不知道从哪里开始
有什么建议吗?一种方法是首先通过regexp\u extract
将key\u-time
转换为有效的时间戳格式,然后使用date\u-format
将其转换为所需的格式:
val df = Seq(
(101, "2018-07-01 12:32:0424"),
(102, "2018-07-01 12:32:123456")
).toDF("account_id ", "key_time")
val pattern = "(\\d{4}-\\d{2}-\\d{2} \\d{2}:\\d{2}:\\d{2})(.*)"
df.
withColumn("key_time_1", regexp_extract($"key_time", pattern, 1)).
withColumn("key_time_2", regexp_extract($"key_time", pattern, 2)).
withColumn("key_timestamp", concat($"key_time_1", lit("."), $"key_time_2")).
withColumn("key_time", date_format($"key_timestamp", "yyyy-MM-dd HH:mm:ssSSS")).
select("account_id ", "key_timestamp", "key_time").
show(false)
// +-----------+------------------------+----------------------+
// |account_id |key_timestamp |key_time |
// +-----------+------------------------+----------------------+
// |101 |2018-07-01 12:32:04.24 |2018-07-01 12:32:04240|
// |102 |2018-07-01 12:32:12.3456|2018-07-01 12:32:12345|
// +-----------+------------------------+----------------------+
是键时间列时间戳的类型?还是字符串?@Misha,而不是6
,如果你想将精度降低到毫秒,是否应该将其填充或修剪为5
位(即2代表秒+3代表毫秒)?哦,是的,我错过了数字,没错,是5位@LeoC@Shaido,它是时间戳的类型,我想我可能需要把它转换成字符串,然后再做一个子字符串?但如果不是毫秒,我仍然需要填充0