将日期转换为整数scala spark
我有一个数据框,包含两列日期将日期转换为整数scala spark,scala,date,apache-spark,Scala,Date,Apache Spark,我有一个数据框,包含两列日期start_date和finish_date;我创建了一个新列,在这两个日期之间添加moyen +-----+--------+-------+---------+-----+--------------------+------------------- start_date| finish_date| moyen_date| +-----+--------+-------+--------
start_date
和finish_date
;我创建了一个新列,在这两个日期之间添加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")))
但我想将开始日期和结束日期转换为整数,因为我知道每列都包含date+time
有人能帮我吗
感谢您将此视为数据框架的一部分:
df.show(false)
+---------------------+
|ts |
+---------------------+
|2010-11-03 15:56:34.0|
+---------------------+
unix\u timestamp
返回自历元以来的毫秒数。输入列的类型应为时间戳
。输出列的类型为long
df.withColumn("unix_ts" , unix_timestamp($"ts").show(false)
+---------------------+----------+
|ts |unix_ts |
+---------------------+----------+
|2010-11-03 15:56:34.0|1288817794|
+---------------------+----------+
要将其转换回您选择的时间戳格式,您可以使用from_unixtime
,它还将可选的时间戳格式作为参数。您正在使用来确定日期,这就是为什么您只获取日期而不获取时间
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|
+---------------------+----------+---------------------+
但是,这里的_utime
列的类型为string
。要将其转换为时间戳
,您可以简单地使用:
df.withColumn("from_utime" , $"from_utime".cast("timestamp") )
因为它已经是ISO日期格式,所以不需要特定的转换。对于任何其他格式,您将需要使用
unix\u timestamp
和from\u unixtime
什么类型的整数
unix\u timestamp($“start\u date”)
将返回一个bigint
.date到Int。但现在我改变了看法,因为我认为转换==>后该值会很大,所以我想将其更改为长Int谢谢Philantrover已经在上面的评论中回答了您的问题是的,非常感谢你的回答我回答了你,我去测试了一下,效果很好。@philantrovert为什么不在下面回答:)这样vero就可以把这个问题标记为已回答。