首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在PySpark (DataBricks)中构建动态WHERE

在PySpark (DataBricks)中构建动态WHERE
EN

Stack Overflow用户
提问于 2022-11-18 21:09:26
回答 1查看 30关注 0票数 0

因此,我试图使用Python / PySpark从DataBricks (公司的lakehouse for info)中的info中动态加载一组Server表。我试图使它尽可能地由动态/数据驱动,所以我试图构建一个动态的位置来过滤数据。因为每次从湖畔拉出的数据都有一个不同的日期列要过滤,所以我需要能够使用两个变量来筛选要过滤的列,也可以使用有关日期的变量。

我想做这样的事:

代码语言:javascript
复制
where_condition = "((" + check_column + " > '" + start_date_str + "') & (" + check_column + " < '" + end_date_str + "'))"
      
filtered_df = df.where(where_condition)

但我得到了以下错误:

代码语言:javascript
复制
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的动态列,以及与那些动态列进行比较的动态值,有什么建议吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-19 13:23:05

Spark中的&操作符用于按位和,需要积分操作数,错误是这样说的。

您想在这里使用的是逻辑与运算符,即AND

代码语言:javascript
复制
where_condition = "((" + check_column + " > '" + start_date_str + "') AND (" + check_column + " < '" + end_date_str + "'))"

构建动态条件的一种更简洁的方法是使用PySpark API:

代码语言:javascript
复制
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列类中的重载运算符。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74495339

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档