我在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列与一个值进行比较?
答案 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|
+-----+-------------+