Spark 2.4.7中如何从含可变主键的嵌套JSON提取key2值并保留行序
提取DataFrame嵌套JSON中所有key2值并保留原行信息
处理思路
- 将JSON格式的列解析为Python字典
- 提取字典中所有可变主键对应的子对象,转为列表形式(兼容空JSON场景)
- 把列表列"炸开",让每个子对象单独成为一行,同时保留原行的其他信息
- 从每个子对象中提取key2的值
代码实现
假设你的DataFrame名为df,存储嵌套JSON的列名为nested_json,其他行标识列(如id)需保留:
import pandas as pd import json # 1. 将JSON字符串解析为字典 df['json_dict'] = df['nested_json'].apply(json.loads) # 2. 提取所有子对象为列表,空JSON则生成含空字典的列表以保留原行 df['sub_items'] = df['json_dict'].apply(lambda x: list(x.values()) if x else [{}]) # 3. 炸开列表,每个子对象单独占一行 exploded_df = df.explode('sub_items') # 4. 提取key2值,保留原行信息并清理中间列 result_df = exploded_df.assign( key2=exploded_df['sub_items'].apply(lambda x: x.get('key2', None)) ).drop(columns=['nested_json', 'json_dict', 'sub_items']) # 查看最终结果 print(result_df)
示例演示
原DataFrame
| id | nested_json |
|---|---|
| 1 | {"primary key1":{"key1":"value1","key2":"value2","key3":"value3"}, "primary key2":{"key1":"value4","key2":"value5","key3":"value6"}} |
| 2 | {} |
| 3 | {"primary key3":{"key1":"value7","key2":"value8","key3":"value9"}} |
处理后结果
| id | key2 |
|---|---|
| 1 | value2 |
| 1 | value5 |
| 2 | None |
| 3 | value8 |
内容的提问来源于stack exchange,提问作者Cesar Pereira
相关产品推荐
相关产品推荐

