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

PySpark执行多行SQL时出现EOF in multi-line string错误求助

修复PySpark执行SQL时的EOF in multi-line string错误

问题诊断

出现该错误的核心原因是SQL字符串中混入了全角空格(非标准半角空格),具体位置在子查询结尾的)  b处。这种特殊字符会干扰Python的字符串tokenization流程,导致解析器误判多线字符串未正确闭合。此外,Hive兼容的隐式逗号JOIN语法,在PySpark的SQL解析器中可能引发额外的解析歧义。

修复步骤

  • 替换所有全角空格为普通半角空格,重点检查子查询括号与表别名之间的空格。
  • 将隐式逗号JOIN改为显式INNER JOIN ... ON语法,明确表关联逻辑,避免解析歧义。
  • 确保f-string的三个双引号"""前后无多余转义字符或格式混乱。

修复后的代码示例

spark.sql(f"""
    create table DEFAULT.TMP_TABLE as
    select b.customer_id, prob
    from bi_prod.TMP_score_1st_day a
    inner join (
        select customer_id, prob from BI_prod.Tbl_brand1_scoring where insert_date = 20230101
        union all
        select customer_id, prob from BI_prod.Tbl_brand2_scoring where insert_date = 20230101
    ) b on a.customer_id = b.customer_id
""")

额外验证建议

  • 执行前可通过print()输出SQL字符串,检查是否存在隐藏的特殊字符或格式错误。
  • 确认insert_date字段类型:如果该字段是字符串类型,需将20230101改为'20230101',避免PySpark出现类型不匹配错误(Hive可能自动兼容此类隐式转换,但PySpark解析更严格)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.01 16:37:13