[英]convert date to integer scala spark
我有一个数据finish_date
,其中包含日期为start_date
和finish_date
2列; 我创建了一个新列,在两个日期之间添加了Moyen。
+-----+--------+-------+---------+-----+--------------------+-------------------
start_date| finish_date| moyen_date|
+-----+--------+-------+---------+-----+--------------------+-------------------
2010-11-03 15:56:... |2010-11-03 17:43:...| 0|
2010-11-03 17:43:... |2010-11-05 13:21:...| 2|
2010-11-05 13:21:... |2010-11-05 14:08:...| 0|
2010-11-05 14:08:... |2010-11-05 14:08:...| 0|
+-----+--------+-------+---------+-----+--------------------+-------------------
我计算了两个日期之间的差:
var result = sqlDF.withColumn("moyen_date",datediff(col("finish_date"), col("start_date")))
但是我想将start_date和finish_date转换为整数,因为知道每一列都包含date + time
。
有人可以帮我。 ?
谢谢
将其视为数据框的一部分:
df.show(false)
+---------------------+
|ts |
+---------------------+
|2010-11-03 15:56:34.0|
+---------------------+
unix_timestamp
返回自纪元以来的毫秒数。 输入列应为timestamp
类型。 输出列的类型为long
。
df.withColumn("unix_ts" , unix_timestamp($"ts").show(false)
+---------------------+----------+
|ts |unix_ts |
+---------------------+----------+
|2010-11-03 15:56:34.0|1288817794|
+---------------------+----------+
要将其转换回您选择的时间戳格式,可以使用from_unixtime
,它也将可选的时间戳格式作为参数。 您使用的是to_date
,这就是为什么只获取日期而不是时间的原因。
df.withColumn("unix_ts" , unix_timestamp($"ts") )
.withColumn("from_utime" , from_unixtime($"unix_ts" , "yyyy-MM-dd HH:mm:ss.S"))
.show(false)
+---------------------+----------+---------------------+
|ts |unix_ts |from_utime |
+---------------------+----------+---------------------+
|2010-11-03 15:56:34.0|1288817794|2010-11-03 15:56:34.0|
+---------------------+----------+---------------------+
但是from_utime
列的类型为string
。 要将其转换为timestamp
,可以简单地使用:
df.withColumn("from_utime" , $"from_utime".cast("timestamp") )
由于它已经采用ISO日期格式,因此无需进行特定转换。 对于任何其他格式,您将需要使用unix_timestamp
和from_unixtime
的组合。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.