Spark数据帧将整数转换为时间戳并查找日期差

Lad*_*lav 1 scala apache-spark

我有这个DataFrame org.apache.spark.sql.DataFrame

|-- timestamp: integer (nullable = true)
|-- checkIn: string (nullable = true)

| timestamp|   checkIn|
+----------+----------+
|1521710892|2018-05-19|
|1521710892|2018-05-19|
Run Code Online (Sandbox Code Playgroud)

所需的结果:获取一个新的列,该列的日期checkIntimestamp(和2018-03-03 23:59:592018-03-04 00:00:01之间的天差应为1)

因此,我需要

  • 将时间戳转换为日期(这是我遇到的问题)
  • 从另一个取出一个日期
  • 使用某些功能提取日期(尚未找到此功能)

Leo*_*o C 7

您可以使用from_unixtime将时间戳转换为日期并datediff计算天数的差额:

val df = Seq(
  (1521710892, "2018-05-19"),
  (1521730800, "2018-01-01")
).toDF("timestamp", "checkIn")

df.withColumn("tsDate", from_unixtime($"timestamp")).
  withColumn("daysDiff", datediff($"tsDate", $"checkIn")).
  show

// +----------+----------+-------------------+--------+
// | timestamp|   checkIn|             tsDate|daysDiff|
// +----------+----------+-------------------+--------+
// |1521710892|2018-05-19|2018-03-22 02:28:12|     -58|
// |1521730800|2018-01-01|2018-03-22 08:00:00|      80|
// +----------+----------+-------------------+--------+
Run Code Online (Sandbox Code Playgroud)

  • `from_unixtime` 转换为字符串,因此在数据较大的情况下,您几乎肯定最好将数字列转换为“时间戳”,例如: ```scala df.withColumn("tsDate", col( "时间戳").cast(TimestampType)) ``` (4认同)