Hive pyspark日期比较



我正在尝试将hiveQL查询转换为pyspark。我正在过滤日期并获得不同的结果,我想知道如何在pySpark中获得与Hive匹配的行为。hive查询是:

SELECT COUNT(zip_cd) FROM table WHERE dt >= '2012-01-01';

在pySpark中,我进入解释器:

import pyspark.sql.functions as psf
import datetime as dt
hc = HiveContext(sc)
table_df = hc.table('table')
DateFrom = dt.datetime.strptime('2012-01-01', '%Y-%m-%d')
table_df.filter(psf.trim(table.dt) >= DateFrom).count()

我得到类似的,但不相同的结果,在两个计数。有人知道这是怎么回事吗?

您的代码首先从日期2012-01-01创建datetime对象。然后在过滤过程中,对象被替换为它的字符串表示形式(2012-01-01 00:00:00),并使用字典法比较日期,过滤掉2012-01-01:

>>> '2012-01-01' >= '2012-01-01 00:00:00'
False
>>> '2012-01-02' >= '2012-01-01 00:00:00'
True

要达到与SQL相同的结果,只需删除strptime代码并使用字符串比较日期。

最新更新