因此,我试图使用Python / PySpark从DataBricks (公司的lakehouse for info)中的info中动态加载一组Server表。我试图使它尽可能地由动态/数据驱动,所以我试图构建一个动态的位置来过滤数据。因为每次从湖畔拉出的数据都有一个不同的日期列要过滤,所以我需要能够使用两个变量来筛选要过滤的列,也可以使用有关日期的变量。
我想做这样的事:
where_condition = "((" + check_column + " > '" + start_date_str + "') & (" + check_column + " < '" + end_date_str + "'))"
filtered_df = df.where(where_condition)但我得到了以下错误:
AnalysisException: cannot resolve '((`l0_createTime_` > CAST('2022-11-01' AS TIMESTAMP)) & (`l0_createTime_` < CAST('2022-11-02' AS TIMESTAMP)))' due to data type mismatch: '((`l0_createTime_` > CAST('2022-11-01' AS TIMESTAMP)) & (`l0_createTime_` < CAST('2022-11-02' AS TIMESTAMP)))' requires integral type, not boolean; line 1 pos 1;我觉得我错过了什么(很明显).我尝试过多种构建where语句的方法,但它并不是这样认为的。
对于如何构建这样的动态内容,包括来自dataframe的动态列,以及与那些动态列进行比较的动态值,有什么建议吗?
发布于 2022-11-19 13:23:05
Spark中的&操作符用于按位和,需要积分操作数,错误是这样说的。
您想在这里使用的是逻辑与运算符,即AND
where_condition = "((" + check_column + " > '" + start_date_str + "') AND (" + check_column + " < '" + end_date_str + "'))"构建动态条件的一种更简洁的方法是使用PySpark API:
from pyspark.sql import functions as F
where_condition = (F.col(check_column) > start_date_str) & (F.col(check_column) < end_date_str)
filtered_df = df.where(where_condition)在本例中,使用了&运算符,它是PySpark列类中的重载运算符。
https://stackoverflow.com/questions/74495339
复制相似问题