You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

运行AWS Glue DataFrame过滤代码时触发ValueError:无法将列转换为布尔值的技术咨询

解决PySpark DataFrame布尔表达式构建的ValueError问题

这个错误的核心原因是你在PySpark的Column表达式里误用了Python原生的in运算符,我来帮你修正代码并拆解问题所在:

错误根源

PySpark的Column对象并不支持Python原生的in语法来判断值是否在集合中——这个语法只能用于Python原生容器(比如列表、元组),不能直接用来生成DataFrame的过滤布尔表达式。另外要注意,&的运算符优先级高于==,所以每个单独的过滤条件必须用括号明确包裹,避免运算顺序混乱(你原来的代码这部分是对的,主要问题出在in的使用上)。

修正后的完整代码

import pyspark.sql.functions as f

retail_sales_transaction = glueContext.create_dynamic_frame.from_catalog(
    database="conform_main_mobconv", 
    table_name="retail_sales_transaction"
)
df_retail_sales_transaction = (retail_sales_transaction.toDF()
    .filter(
        (f.col('dh_audit_source_system_id') == 'SRC_JDAESO') & 
        (f.col('country_code').isin('AU', 'NZ'))
    )
    .select(
        "transaction_id", "transaction_key", "transaction_timestamp",
        "personnel_key", "retail_site_id", "personnel_role",
        "country_code", "business_week", "dh_audit_start_timestamp"
    )
)

关键修改点

  • 替换in为isin()方法:把f.col('country_code') in ('AU','NZ')改成f.col('country_code').isin('AU', 'NZ')。isin()是PySpark Column API专门提供的方法,用于实现SQL中IN的逻辑,能正确生成布尔过滤表达式。
  • 保留条件的括号包裹:每个条件都用()括起来,确保&运算只会在两个完整的布尔条件之间进行,避免因运算符优先级导致的隐性错误。

这样修改后,你的过滤逻辑就能正确执行,不会再抛出ValueError了。

内容的提问来源于stack exchange,提问作者Sonam Garg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 11:22:43