将大模型指令微调数据从parquet转为json格式

将大模型指令微调数据从parquet转为json格式

python 复制代码
import os
import json
import random
import pandas as pd
import pyarrow as pa
import pyarrow.parquet as pq

def read_json_file(file_path):
    try:
        with open(file_path, 'r', encoding='utf-8') as file:
            data = json.load(file)
            return data
    except FileNotFoundError:
        print(f"File {file_path} not found.")
    except json.JSONDecodeError:
        print(f"File {file_path} is not a valid JSON file.")
    except Exception as e:
        print(f"An error occurred: {e}")

def read_jsonl_file(file_path):
    data = []
    with open(file_path, 'r', encoding='utf-8') as file:
        for line in file:
            try:
                data.append(json.loads(line))
            except:
                print(line)
                1/0
    return data

def read_praquet_file(file_path):
    table = pq.read_table(file_path)
    df = table.to_pandas()
    result=[row.tolist() for _, row in df.iterrows()]
    return result

def save_json(file_path,data):
    with open(file_path, 'w', encoding='utf-8') as file:
        json.dump(data, file, indent=4, ensure_ascii=False)
    print(f'Save {file_path} is ok!')

def save_jsonl(file_path,data):
    try:
        with open(file_path, 'w', encoding='utf-8') as file:
            for item in data:
                file.write(json.dumps(item, ensure_ascii=False) + '\n')
        print(f"Data saved to {file_path}")
    except Exception as e:
        print(f"An error occurred while saving the data: {e}")

def save_parquet(file_path, data):

    if isinstance(data, list):
        data = pd.DataFrame(data)
    if not isinstance(data, pd.DataFrame):
        raise ValueError("data must be a pandas DataFrame or a list of lists")
    pq.write_table(pa.Table.from_pandas(data), file_path)
    print(f'Save {file_path} is ok!')

def convert_lists_to_json(df):
    """Convert lists in DataFrame to JSON strings."""
    for column in df.columns:
        if df[column].apply(lambda x: isinstance(x, list)).any():
            df[column] = df[column].apply(lambda x: json.dumps(x) if isinstance(x, list) else x)
    return df

root='/path/to/parquet/dir'
save_path='/path/to/savedir/save_name.json'
new_data=[]
dirs=os.listdir(root)
for one in dirs:
    if one.endswith('.parquet'):
        print(one)
        file_path=root+'/'+one
        data=read_praquet_file(file_path)
        for x in data:
            inp=x[3]
            res=x[4]
            new_entry={
                "conversations": [
                    {
                        "role": "user",
                        "content": inp
                    },
                    {
                        "role": "assistant",
                        "content": res
                    }
                ]
            }
            if len(inp)>0 and len(res)>0:
                new_data+=[new_entry]
                
save_json(save_path,new_data)
相关推荐
小疯仔9 小时前
轨迹在地图上“漂“了 500 米?一文吃透 WGS-84→GCJ-02 坐标转换引擎(GPX→JSON 实战源码剖析)
小程序·json·notepad++
Flynt11 小时前
"只输出 JSON"根本不够:LLM 结构化输出的坑,我实测了 60 次调用
llm·json
她说..20 小时前
MySQL 与 Java 的 JSON 数据处理
java·mysql·json·springboot
牛油果子哥q2 天前
C++对接LLM完整工程:异步HTTP请求、JSON解析、超时容错、重连兜底
c++·http·json
小刘在重生~2 天前
Django|Ajax 入门、JSON 返回、ECharts 图表、文件上传完整笔记
ajax·django·json
谢斯4 天前
[unity]如何在unity中添加newtonsoft-json
unity·json·游戏引擎
2601_962066934 天前
短视频批量制作怎么做?2026年用 huasheng-cli 的 --json 与退出码,一张选题表批量出片
json·音视频
oliver_sys_log6 天前
老项目 json-lib 2.4 JSONTokener 精度丢失问题排查
json
IT_Octopus6 天前
JSON 日志里的 `{“$ref“:“$.xxx“}`:从 fastjson 兼容包到原生 fastjson2 的迁移实录
开发语言·python·json
数据狐(Datafox)6 天前
mercadolibre.item_get 工程实战:美客多商品详情API技术解析与落地应用
java·人工智能·mysql·json