Spark SQL嵌套JSON含数字字段名引发ParseException问题求助
解决方案:Spark SQL中访问数字开头的嵌套字段
这个问题的核心是Spark SQL的标识符解析规则和DataFrame API的字段引用逻辑存在差异:
- DataFrame API的
select("x.y.z.100.user")是直接按字符串路径解析嵌套字段,对字段名的格式限制更宽松; - 但Spark SQL的解析器会严格遵循SQL语法规范,不允许标识符(字段名)以数字开头,所以
.100会被判定为无效语法,抛出解析异常。
正确的Spark SQL写法
把数字开头的字段名用反引号`包裹起来,让解析器把它当成合法的标识符:
select x.y.z.`100`.user from $tableInMemory
为什么这样有效?
反引号在Spark SQL里是用来转义特殊标识符的,适用场景包括:
- 以数字开头的字段名
- 包含空格、特殊字符的字段名
- 和SQL关键字重名的字段名
用反引号包裹后,解析器会把`100`当作一个完整的字段名来处理,而不会把.100当成语法错误的一部分。
验证示例
假设你的内存表已经创建完成,执行修改后的SQL语句就能正常提取user字段的值,效果和DataFrame API的select("x.y.z.100.user")完全一致。
内容的提问来源于stack exchange,提问作者Arnon Rodman
相关产品推荐
相关产品推荐

