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

PySpark SQL使用CASE WHEN创建新列报错的解决咨询

解决Spark SQL CASE语句的语法错误问题

我来帮你搞定这个报错问题,你遇到的错误完全是因为CASE表达式的写法不符合Spark SQL的语法规范,咱们一步步捋清楚:

错误原因分析

你原来的CASE写法犯了两个关键错误:

  1. 在THEN子句里错误使用赋值语法:你写的then high_income_encoded = 0.162是不对的,CASE表达式的作用是返回一个具体数值,而不是在这里给列赋值。正确的做法是直接返回对应数值,最后用as指定新列的名字。
  2. 多余的双引号包裹列名:Spark SQL中,只要列名没有空格或特殊字符,不需要用双引号包裹,反而会导致解析器识别错误。

正确的SQL写法

把CASE表达式改成直接返回对应数值的形式,最后用as high_income_encoded命名新列,同时确保覆盖所有aml_cluster_id(0-3)和high_income(0-1)的组合,也可以加一个else兜底处理未覆盖的特殊情况:

q = """
SELECT 
    *,
    CASE 
        WHEN aml_cluster_id = 0 AND high_income = 1 THEN 0.162
        WHEN aml_cluster_id = 0 AND high_income = 0 THEN 0.337
        WHEN aml_cluster_id = 1 AND high_income = 1 THEN 0.049
        WHEN aml_cluster_id = 1 AND high_income = 0 THEN 0.402
        WHEN aml_cluster_id = 2 AND high_income = 1 THEN 0.005
        WHEN aml_cluster_id = 2 AND high_income = 0 THEN 0.0
        WHEN aml_cluster_id = 3 AND high_income = 1 THEN 0.023
        WHEN aml_cluster_id = 3 AND high_income = 0 THEN 0.022
        -- 兜底处理意外情况,可根据需求调整
        ELSE 0.0 
    END AS high_income_encoded
FROM event_rate_holder
"""

执行验证

运行spark.sql(q).show(10)就能得到预期结果,前10行的high_income_encoded列会正确显示对应的数值:

+-----------+--------------+-------------------+
|high_income|aml_cluster_id|high_income_encoded|
+-----------+--------------+-------------------+
|          0|             0|              0.337|
|          0|             0|              0.337|
|          0|             1|              0.402|
|          0|             1|              0.402|
|          0|             0|              0.337|
|          0|             0|              0.337|
|          0|             1|              0.402|
|          1|             1|              0.049|
|          1|             0|              0.162|
|          1|             0|              0.162|
+-----------+--------------+-------------------+

内容的提问来源于stack exchange,提问作者Clock Slave

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:38:44