使用datasets库加载JSONL文件时出现多余空字段的问题
解决datasets加载JSONL时嵌套字典自动补None的问题
你遇到的问题是因为datasets库默认会扫描整个JSONL文件,推断出统一的特征结构(schema),把所有出现过的键都纳入其中,所以第二个条目里没有的a键会被自动填充为None。以下两种方法可以解决这个问题:
方法一:加载后过滤None值
加载数据集后,通过map方法处理每个样本,过滤掉term字段中值为None的键:
from datasets import load_dataset path = "./testdata.jsonl" dataset = load_dataset('json', data_files=path, split='train') def clean_term(example): # 过滤term中值为None的键 example['term'] = {key: val for key, val in example['term'].items() if val is not None} return example # 应用处理函数 dataset = dataset.map(clean_term) print(dataset[1])
执行后输出就是预期的:
{'src': 'hi', 'term': {'b': 'bb'}}
方法二:使用流式加载模式
启用流式加载(streaming=True),这样库不会预先扫描文件推断统一schema,而是直接返回每个样本的原始结构:
from datasets import load_dataset path = "./testdata.jsonl" # 开启流式加载 dataset = load_dataset('json', data_files=path, split='train', streaming=True) # 转换为列表访问第二个元素 dataset_list = list(dataset) print(dataset_list[1])
这种方式下,每个样本的term会保持原始的键值对,不会自动补全缺失的键。
内容的提问来源于stack exchange,提问作者bluebingoSu
相关产品推荐
相关产品推荐

