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

Spark SQL如何提取字符串字段中JSON格式的问卷问题与答案

错误原因

报错是因为Responses字段是字符串类型,存储的是JSON格式的文本,而explode函数要求输入必须是数组或Map类型,因此无法直接处理字符串输入。

解决步骤

需要先将字符串格式的JSON内容解析为Spark可识别的复合类型,再通过两次explode拆解得到最终的问答列:

  1. 用from_json函数将字符串类型的Responses解析为数组<Map<字符串,字符串>>类型
  2. 第一次explode拆解数组,得到每个独立的问答Map对象
  3. 第二次explode拆解Map的键值对,得到对应的问题、答案字段

完整可运行SQL代码

SELECT 
  r.CustomerID,
  kv.question AS Questions,
  kv.answer AS Answers
FROM (
  -- 子查询完成JSON字符串到复合类型的转换
  SELECT 
    CustomerID,
    from_json(Responses, 'array<map<string, string>>') AS response_arr
  FROM your_table_name -- 此处替换为你的实际表名
) r
-- 拆解数组,得到每条问答对应的Map
LATERAL VIEW OUTER EXPLODE(r.response_arr) exploded AS response_map
-- 拆解Map,得到问题和答案
LATERAL VIEW OUTER EXPLODE(response_map) kv AS question, answer

说明

  • 如果不需要保留没有有效Responses的CustomerID,可以去掉两个OUTER关键字
  • 如果JSON结构存在嵌套等特殊情况,可以调整from_json的Schema定义适配实际结构
  • 代码可以直接兼容你给出的示例数据,运行后得到的结果和你期望的输出完全一致

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 10:00:06