Spark SQL中如何处理含非字母数字字符的列名(如~label)
处理Spark SQL中含非字母数字字符的列名问题
我之前也碰到过类似的场景,Spark SQL对非标准标识符字符的处理确实有严格的语法要求。针对你遇到的~label列名问题,只需要用**反引号(`)**把这个特殊列名包裹起来,就能让Spark正确识别它了。
修改后的SQL语句
select phoneId as id, phoneId, 'phone' as `~label` from phones
报错原因解释
Spark SQL默认只识别由字母、数字和下划线组成的标识符,当列名包含~这类特殊字符时,如果不做转义,Spark会把~当成无效的语法符号,从而抛出你看到的语法错误:
extraneous input '~' expecting {
, ',', 'FROM', 'WHERE', 'GROUP', 'ORDER', 'HAVING', 'LIMIT', 'LATERAL', 'WINDOW', 'UNION', 'EXCEPT', 'MINUS', 'INTERSECT', 'SORT', 'CLUSTER', 'DISTRIBUTE'}(line 1, pos 42) == SQL == select phoneId as id, phoneId, 'phone' as ~label from phones ------------------------------------------^^^
用反引号包裹后,Spark会把整个~label当作一个完整的列名标识符来处理,不再解析其中的特殊字符,这也是Spark SQL处理所有非标准标识符的通用方法——不管是包含空格、连字符还是其他特殊符号的列名,都可以用这个方式解决。
内容的提问来源于stack exchange,提问作者WestCoastProjects
相关产品推荐
相关产品推荐

