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

Spark读取含字典的JSON,如何显示完整键值对?

问题:Spark读取嵌套JSON后show()仅显示值,如何展示完整键值对?

你遇到的情况是因为Spark将你的JSON解析成了包含结构体(struct)字段的DataFrame,默认的show()可能没有完整展示结构体的键值对内容。下面给你几种可行的解决方法:

方法1:展开结构体字段,直接展示键和值列

如果希望把dict里的键值对拆分成单独的列展示,可以使用select展开结构体:

val mdf = sparkSession.read.option("multiLine","true").json("multi2.json")
// 展开dict结构体的所有字段
val expandedDf = mdf.select("dict.*")
expandedDf.show(false)

执行后会输出:

+-------+
|key    |
+-------+
|value1 |
|value2 |
+-------+

这样就能清晰看到键(列名key)和对应的值。

方法2:将结构体转为JSON字符串,展示完整键值对

如果想保持键值对的完整格式(比如{"key":"value1"}),可以用to_json函数把结构体字段转换成JSON字符串:

import org.apache.spark.sql.functions.to_json

val mdf = sparkSession.read.option("multiLine","true").json("multi2.json")
val jsonStrDf = mdf.select(to_json($"dict").alias("full_key_value"))
jsonStrDf.show(false)

执行后输出:

+-------------------+
|full_key_value     |
+-------------------+
|{"key":"value1"}   |
|{"key":"value2"}   |
+-------------------+

这样就能直接看到完整的键值对格式了。

方法3:调整显示逻辑,确认结构体完整内容

其实默认情况下,show(false)应该会展示结构体的完整结构,只是Spark有时会用简写形式显示。你可以先查看DataFrame的schema确认结构,再针对性展示:

val mdf = sparkSession.read.option("multiLine","true").json("multi2.json")
// 先查看schema,确认嵌套结构
mdf.printSchema()
// 输出:
// root
//  |-- dict: struct (nullable = true)
//  |    |-- key: string (nullable = true)

// 同时展示结构体本身和内部的键值
mdf.select($"dict", $"dict.key").show(false)

执行后会输出:

+----------+-------+
|dict      |key    |
+----------+-------+
|{value1}  |value1 |
|{value2}  |value2 |
+----------+-------+

结合schema就能明确dict字段里包含key这个键,对应的值也清晰可见。


内容的提问来源于stack exchange,提问作者More Than Five

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 07:47:23