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

如何将pandas DataFrame转为指定格式JSON并存储到HDFS

问题根因

你当前代码的两个问题分别对应两个明确的错误点:

  • JSON格式不符合预期:你使用set_index('id')['weight'].to_dict()生成的是id为键、weight为值的单层字典,结构为{30222:5, 10211:2, 30333:3},和你需要的「元素为包含id、weight两个字段的对象的数组」结构不匹配。
  • 抛出文件不存在异常:TemporaryDirectory上下文管理器只会自动创建根级临时目录,你拼接的my_json是嵌套在临时目录下的子文件夹,没有提前创建的情况下直接往该路径下写文件,就会触发路径不存在的报错。
解决方案

直接按以下逻辑调整代码即可:

  1. 用pandas自带的to_dict('records')方法生成符合要求的对象数组结构,不需要手动做索引转换。
  2. 写文件前调用os.makedirs递归创建所有不存在的父目录,加上exist_ok=True参数避免目录已存在时报错。
  3. 本地文件写入完成后直接对接HDFS上传逻辑即可,上下文管理器退出时会自动清理临时目录下的所有文件,不需要手动删除。

完整可运行代码:

import os
import json
import pandas as pd
from tempfile import TemporaryDirectory

# 构造示例DataFrame
data = [[30222, 5], [10211, 2], [30333, 3]]
df = pd.DataFrame(data, columns=['id', 'weight'])

with TemporaryDirectory() as tempdir:
    # 定义本地临时存储路径
    temp_local_dir = os.path.join(tempdir, "my_json")
    temp_local_file = os.path.join(temp_local_dir, "my_json.json")

    # 创建缺失的父目录
    os.makedirs(temp_local_dir, exist_ok=True)

    # 转换为目标JSON结构并写入文件
    json_data = df.to_dict('records')
    with open(temp_local_file, "w", encoding="utf-8") as f:
        # 不需要格式化输出可以去掉indent参数,减小文件体积
        json.dump(json_data, f, ensure_ascii=False, indent=2)

    # 此处添加HDFS上传逻辑即可,例如调用hdfs shell命令:
    # os.system(f"hdfs dfs -put {temp_local_file} /your/hdfs/target/path/")

运行后生成的JSON文件内容和需求完全一致:

[
  {"id": 30222, "weight": 5},
  {"id": 10211, "weight": 2},
  {"id": 30333, "weight": 3}
]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 10:33:09