繁体   English   中英

将日期转换为整数scala spark

[英]convert date to integer scala spark

我有一个数据finish_date ,其中包含日期为start_datefinish_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_timestampfrom_unixtime的组合。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM