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

如何使用Spark SQL查询过滤中文列名的数据?

问题原因解析
  • 直接写中文列名报错:Spark SQL的语法解析器默认对非ASCII字符的标识符(如中文列名)不做特殊识别,未包裹的中文会被解析为非法语法字符,直接触发解析异常。
  • 加单引号返回空结果:SQL中单引号包裹的内容会被识别为字符串常量,你写的'名稱'=='jeremy'等价于拿固定字符串"名稱"和"jeremy"做等值判断,结果永远为假,所以返回空数据集。
解决方案

方案1:使用反引号包裹中文列名(推荐,无需修改配置)

反引号`是SQL标准中用来包裹特殊标识符的符号,Spark SQL原生支持,直接把中文列名用反引号包裹即可正常识别:

spark.sql("select * from t1 where `名稱` == 'jeremy'").show()

运行后会正常返回匹配的结果:

+------+----+-------+
|  名稱|年齡|address|
+------+----+-------+
|jeremy|  33| Taipei|
+------+----+-------+

方案2:统一规范列名(长期最优)

如果业务允许,建议建表时将所有列名统一调整为英文+下划线的命名规范,从根源上避免多引擎兼容、编码、解析等各类潜在问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 11:06:02