根据两列之间的时间差过滤pyspark数据帧

Filter pyspark dataframe based on time difference between two columns

我有一个包含多列的数据框,其中两列的类型为 pyspark.sql.TimestampType。我想将此数据框过滤到这两列之间的时间差小于一小时的行。

我目前正在尝试这样做: examples = data.filter((data.tstamp - data.date) < datetime.timedelta(hours=1))

但是失败并显示以下错误消息:

org.apache.spark.sql.AnalysisException: cannot resolve '(`tstamp` - `date`)' due to data type mismatch: '(`tstamp` - `date`)' requires (numeric or calendarinterval) type, not timestamp

实现此过滤器的正确方法是什么?

您的列有不同的类型,很难解释差异的含义,通常时间戳是秒,日期是天。您可以事先将两列转换为 unix 时间戳以获得秒数差异:

import pyspark.sql.functions as psf
data.filter(
    psf.abs(psf.unix_timestamp(data.tstamp) - psf.unix_timestamp(data.date)) < 3600
)

编辑

此函数适用于字符串(假设它们具有正确的格式)、时间戳和日期:

import datetime
data = hc.createDataFrame(sc.parallelize([[datetime.datetime(2017,1,2,1,1,1), datetime.date(2017,8,7)]]), ['tstamp', 'date'])
data.printSchema()
    root
     |-- tstamp: timestamp (nullable = true)
     |-- date: date (nullable = true)

data.select(
    psf.unix_timestamp(data.tstamp).alias('tstamp'), psf.unix_timestamp(data.date).alias("date")
).show()
    +----------+----------+
    |    tstamp|      date|
    +----------+----------+
    |1483315261|1502056800|
    +----------+----------+