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

如何遍历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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.03 00:15:06