Scala中如何读取含点号(.)的JSON列?
处理带点号的JSON列读取问题
当JSON列名包含点号(如abc.id)时,Spark会默认将点号解析为嵌套结构的层级分隔符,直接用原代码会导致无法正确识别列名,以下是修正后的实现:
修正后的代码
val data = """{ "abc.id": [{ "id": "123", "name": "UNKNOWN" }]}""" val inputdata = spark.sparkContext.parallelize(data :: Nil) val inputDF = spark.read.json(inputdata) inputDF.show() // 用反引号包裹带点号的列名,避免被解析为嵌套结构 inputDF.select(inputDF.columns.map(c => col(s"`$c`")(0).as(c)): _*).show()
关键说明
- 用反引号(
)包裹列名(如``abc.id` ``),明确告知Spark这是一个完整的列名,而非嵌套字段路径。 - 原代码中
col(c)会把abc.id错误解析为abc结构体下的id字段,反引号是解决这类特殊字符列名的核心手段。
内容的提问来源于stack exchange,提问作者Shankar Panda
相关产品推荐
相关产品推荐

