如何遍历Hugging Face数据集?本地数据集流式遍历方法
本地Hugging Face数据集的遍历与流式处理方法
直接遍历已加载的ds对象
你加载后的ds对象本身就是可迭代的,完全不用转成CSV/JSON再处理,直接用普通for循环就能逐个遍历条目:
from datasets import load_from_disk ds = load_from_disk("你的本地数据集路径") # 遍历每个数据集条目 for item in ds: # 这里写你的处理逻辑,比如打印条目内容、提取字段等 print(item)
如果你的数据集是DatasetDict类型(包含train/val/test等拆分),只需先定位到对应拆分再遍历:
# 遍历每个数据拆分 for split_name in ds: split_dataset = ds[split_name] for item in split_dataset: # 处理单个条目 pass
流式遍历的实现
如果数据集体积很大,不想一次性加载到内存,有两种方式实现流式遍历:
方式1:加载时直接开启流式模式
不用load_from_disk,改用load_dataset并设置streaming=True,数据会按需加载,不会占用过多内存:
from datasets import load_dataset # 流式加载本地JSON格式数据集(也支持CSV/Parquet等格式) streaming_ds = load_dataset("json", data_files="你的本地数据集路径.json", streaming=True) # 遍历流式数据集(以train拆分为例) for item in streaming_ds["train"]: # 处理单个条目 print(item)
方式2:对已加载的数据集模拟流式处理
如果已经用load_from_disk加载了数据集,可以通过分批次读取的方式模拟流式效果:
batch_size = 10 # 每次加载10条数据 total_samples = len(ds) for start_idx in range(0, total_samples, batch_size): end_idx = min(start_idx + batch_size, total_samples) # 取出当前批次的数据集 batch_data = ds[start_idx:end_idx] # 遍历批次内的每个条目 for item in batch_data: # 处理逻辑 pass
这种方式既不用把整个数据集一直放在内存,也不用额外转存为CSV文件,效率比先存再读高很多。
内容的提问来源于stack exchange,提问作者ozil
相关产品推荐
相关产品推荐

