将to_date列与pyspark中的单个值进行比较

时间:2019-08-30 17:05:25

标签: pyspark

我在pyspark中有一个数据框,其内容如下:

df = spark.table('db.table')
            .select(F.col('key').alias('key_a'),
                    F.to_date('move_out_date', 'yyyyMMdd').alias('move_out_date'))

现在,我想将move_out_date列与日期为20151231进行比较。但是下面的代码不起作用

from pyspark.sql import functions as F

df.filter(F.datediff(F.col('move_out_date'), F.to_date('20151231', 'yyyyMMdd')) > 0)

您如何将to_date列与一个值进行比较?

1 个答案:

答案 0 :(得分:0)

这是因为to_date()希望将列作为参数,而您正在传递字符串。要解决,请添加lit()作为参数以及您要比较的日期。

import pyspark.sql.functions as f
from pyspark import Row
from pyspark.shell import spark

df = spark.createDataFrame([
    Row(key=1, date='20151231'),
    Row(key=2, date='20160101'),
    Row(key=3, date='20160102')
])

df = df.select(f.col('key').alias('key_a'),
               f.to_date(f.col('date'), 'yyyyMMdd').alias('move_out_date'))

df = df.filter(f.datediff(f.col('move_out_date'), f.to_date(f.lit('20151231'), format='yyyyMMdd')) > 0)

df.show()

输出:

+-----+-------------+
|key_a|move_out_date|
+-----+-------------+
|    2|   2016-01-01|
|    3|   2016-01-02|
+-----+-------------+