Apache Spark从时间戳列

时间:2017-09-22 13:21:09

标签: apache-spark dataframe apache-spark-sql timestamp

我正在使用Spark数据集,并且无法从时间戳列中减去天数。

我想从Timestamp列中减去几天,并获得具有完整日期时间格式的新列。例如:

2017-09-22 13:17:39.900 - 10 ----> 2017-09-12 13:17:39.900

使用date_sub函数我得到2017-09-12而没有13:17:39.900。

2 个答案:

答案 0 :(得分:5)

cast数据timestampexpr减去INTERVAL

import org.apache.spark.sql.functions.expr

val df = Seq("2017-09-22 13:17:39.900").toDF("timestamp")

df.withColumn(
  "10_days_before", 
  $"timestamp".cast("timestamp") - expr("INTERVAL 10 DAYS")).show(false)
+-----------------------+---------------------+
|timestamp              |10_days_before       |
+-----------------------+---------------------+
|2017-09-22 13:17:39.900|2017-09-12 13:17:39.9|
+-----------------------+---------------------+

如果数据已经是TimestampType,您可以跳过cast

答案 1 :(得分:0)

或者您可以仅使用pyspark +1.5中的date_sub函数:

from pyspark.sql.functions import *

df.withColumn("10_days_before", date_sub(col('timestamp'),10))