PySpark -如何使用OR子句过滤日期?

pcww981p  于 2023-10-15  发布在  Spark
关注(0)|答案(1)|浏览(89)

我需要创建一个PySpark脚本,在其他条件和过滤器中,查询给定的表以查找给定日期之后或其他日期之后的行。这就是我的代码看起来的样子:

#imports
from pyspark.sql import HiveContext
from pyspark.sql.functions import col, concat_ws, collect_list
from datetime import date

...

hive_context = HiveContext(sc)
today = str(date.today())
date_filter_condition = (col("created") >= today) | (col("updated") >= today)

lookup = hive_context.table("MY_TABLE").filter(col("status") == 1 & date_filter_condition)

上面的代码抛出一个错误:
调用o365.and时出错。Trace:异常:方法和([class java.lang. lib])不存在于py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:318)在py4j.reflection.ReflectionEngine.getMethod(ReflectionEngine.java:326)在py4j.Gateway.invoke(Gateway.java:274)在py4j.commands.AbstractCommand.invokeMethod(AbstractCommand.java:132)在py4j.commands.CallCommand.execute(CallCommand.java:79)在py4j.GatewayConnection.run(GatewayConnection.java:238)在java.lang.Thread.run(Thread.java:748)
如果我删除包含日期过滤器(“& date_filter_condition”)的部分,脚本就可以正常工作。如何使用pySpark正确过滤日期?我使用的日期格式为YYYY-MM-DD。

vddsk6oq

vddsk6oq1#

尝试将实际条件放在过滤器函数中,而不是将其分配给变量。

lookup = hive_context.table("MY_TABLE").filter((col("status") == 1) & (col("created") >= today) | (col("updated") >= today))

参考here

相关问题