我正在尝试将hiveQL查询转换为pyspark。我正在过滤日期并得到不同的结果,我想知道如何在pySpark中获得与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()
我变得相似,但不一样,导致两个计数。有谁知道这里发生了什么?
答案 0 :(得分:0)
您的代码首先从日期datetime
创建2012-01-01
个对象。然后在过滤期间,对象被替换为它的字符串表示(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
删除代码并使用字符串比较日期。