我正在尝试将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
代码并使用字符串比较日期。