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

PySpark:高效读取含嵌套键值数组的JSON并生成列行式表格

高效读取嵌套列表格式JSON并生成人员属性表格

问题示例

输入JSON格式:

{"person":[["name","Guy"],["age","25"],["height","2.00"]]}

期望生成表格:

nameageheight
Guy252.00

核心实现方案(兼顾简洁与高性能)

不用先转成键值对字典,直接提取person列表中的键集合和值集合构造表格,避免不必要的字典哈希计算开销,尤其适合大数据量场景:

原生Python + Pandas实现(高效简洁)

import json
import pandas as pd

# 读取JSON文件
with open('your_file.json', 'r') as f:
    data = json.load(f)

# 直接提取键和值,一步构造DataFrame
person_data = data['person']
columns = [item[0] for item in person_data]
values = [item[1] for item in person_data]
df = pd.DataFrame([values], columns=columns)
  • 时间复杂度为O(n)(n为属性数量),无额外字典转换开销,比先转字典再构造DataFrame更快
  • 代码逻辑直白,避免复杂转换步骤

已有DataFrame的合并方案(解决explode困境)

如果你的DataFrame中已有其他数据,无需使用explode,直接按需求合并:

场景1:将人员属性作为新行添加

person_df = pd.DataFrame([values], columns=columns)
# 按列对齐合并,重置索引
combined_df = pd.concat([existing_df, person_df], ignore_index=True)

场景2:将人员属性作为新列添加(为所有行赋值)

for col, val in zip(columns, values):
    existing_df[col] = val

超大规模文件优化

如果处理GB级超大JSON文件,用ijson流式读取,避免一次性加载全量数据到内存:

import ijson
import pandas as pd

with open('large_file.json', 'r') as f:
    # 流式提取person下的所有子元素
    person_data = list(ijson.items(f, 'person.item'))

columns = [item[0] for item in person_data]
values = [item[1] for item in person_data]
df = pd.DataFrame([values], columns=columns)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 05:19:56