数据集导出¶
处理完成后,Data-Juicer 将结果数据集写入你在 export_path 中指定的路径。本页介绍支持的输出格式、将大数据集分片为多个文件、并行导出、直接写入 S3,以及控制哪些中间字段(统计信息、哈希)保留在输出中。
概述¶
Data-Juicer 通过 Exporter(默认模式)或 RayExporter(Ray 模式)导出。导出系统支持:
多种输出格式 — JSONL、JSON、Parquet,Ray 模式下支持更多格式
分片导出 — 按大小将大型数据集拆分为多个文件
并行导出 — 使用多进程加速单文件导出
S3 导出 — 将结果直接写入 Amazon S3 或 S3 兼容存储
统计信息和哈希管理 — 控制输出中保留哪些中间字段
配置¶
基本设置¶
export_path: ./outputs/result.jsonl # 输出文件路径(必需)
export_type: jsonl # 格式类型(省略时从路径自动检测)
export_shard_size: 0 # 本地模式:写入单文件;Ray:按数据块布局写入
export_in_parallel: false # 本地模式下并行写入单文件
keep_stats_in_res_ds: false # 在输出中保留计算的统计信息
keep_hashes_in_res_ds: false # 在输出中保留计算的哈希值
export_extra_args: {} # 额外的格式特定参数
export_aws_credentials: null # S3 导出专用,详见 S3 导出章节
命令行¶
# 基本导出
dj-process --config config.yaml --export_path ./outputs/result.jsonl
# 导出为 Parquet
dj-process --config config.yaml --export_path ./outputs/result.parquet
# 分片导出(每片 256MB)
dj-process --config config.yaml --export_shard_size 268435456
# 在输出中保留统计信息
dj-process --config config.yaml --keep_stats_in_res_ds true
支持的格式¶
默认模式(Exporter)¶
格式 |
后缀 |
描述 |
|---|---|---|
JSONL |
|
JSON Lines — 每行一个 JSON 对象(默认) |
JSON |
|
标准 JSON 数组 |
Parquet |
|
列式格式,适合大型数据集 |
Ray 模式(RayExporter)¶
格式 |
后缀 |
描述 |
|---|---|---|
JSONL |
|
JSON Lines |
JSON |
|
标准 JSON |
Parquet |
|
列式格式 |
CSV |
|
逗号分隔值 |
TFRecords |
|
TensorFlow 记录格式 |
WebDataset |
|
WebDataset tar 格式 |
Lance |
|
Lance 列式格式 |
在本地模式下,export_path 是文件路径。请提供 .jsonl、.json 或 .parquet 扩展名,或显式设置 export_type。
在 Ray 模式下,export_path 是存放输出文件的目录,即使路径以 .jsonl 结尾也是如此。Ray 按数据块布局写入文件;export_shard_size: 0 使用默认布局。
分片导出(本地模式)¶
对于大型数据集,按大小将输出拆分为多个分片文件:
export_path: ./outputs/result.jsonl
export_shard_size: 268435456 # 每片 256 MB
生成的文件如下:
outputs/
├── result-00-of-04.jsonl
├── result-01-of-04.jsonl
├── result-02-of-04.jsonl
└── result-03-of-04.jsonl
Data-Juicer 估算数据集大小,将连续的数据行分成多个分片,再使用多个进程写入。配置的大小是目标值,编码后的文件可能更大或更小。
推荐的分片大小:
数据集大小 |
推荐分片大小 |
说明 |
|---|---|---|
< 1 GB |
0(单文件) |
无需分片 |
1-10 GB |
256 MB - 512 MB |
良好平衡 |
10-100 GB |
512 MB - 1 GB |
更少文件 |
> 100 GB |
1 GB - 10 GB |
避免过多分片 |
分片大小低于 1 MiB 或高于 1 TiB 将触发警告。
并行导出(本地模式)¶
对于单文件导出(export_shard_size: 0),启用并行写入以加速导出过程:
export_path: ./outputs/result.jsonl
export_shard_size: 0
export_in_parallel: true
np: 4 # 并行进程数
重要提示:并行导出有时可能比顺序导出更慢,因为 IO 阻塞,特别是对于非常大的数据集。如果观察到这种情况,请设置 export_in_parallel: false。
当 export_shard_size > 0 时,无论此设置如何,分片始终并行导出。
S3 导出¶
本地和 Ray 模式都可以直接将结果写入 S3。先设置 export_path,例如:
export_path: "s3://my-bucket/outputs/result.jsonl"
可以通过环境变量提供凭证:
export AWS_ACCESS_KEY_ID="your-access-key-id"
export AWS_SECRET_ACCESS_KEY="your-secret-access-key"
export AWS_DEFAULT_REGION="us-east-1"
使用临时凭证时,还需要设置 AWS_SESSION_TOKEN。也可以在配方的 export_aws_credentials 中提供凭证;本地和 Ray 模式均支持此配置:
export_path: "s3://my-bucket/outputs/result.jsonl"
export_aws_credentials:
aws_access_key_id: "your-access-key-id"
aws_secret_access_key: "your-secret-access-key"
aws_region: "us-east-1"
endpoint_url: "https://s3.example.com" # 使用 S3 兼容存储时设置
访问密钥、会话令牌和区域按字段依次从环境变量、显式配置读取。未提供访问密钥时,存储客户端会使用默认 AWS 凭证链,例如 IAM 角色或本地凭证文件。
Ray 模式也接受 export_extra_args 中的凭证;同名配置以 export_aws_credentials 为准。本地模式通过 s3fs 访问 S3,Ray 模式通过 PyArrow 访问 S3。
在本地模式中,设置 export_shard_size: 268435456 可按约 256 MiB 的目标大小分片,输出对象形如 result-00-of-04.jsonl。Ray 模式将文件写入 export_path 对应的目录前缀。
统计信息和哈希管理¶
在处理过程中,DataJuicer 会计算中间字段:
统计信息(
__dj__stats__、__dj__meta__):由 Filter 算子计算哈希值(
__dj__hash__、__dj__minhash__、__dj__simhash__等):由 Deduplicator 算子计算
默认情况下,这些字段会从导出的数据集中移除。要保留它们:
keep_stats_in_res_ds: true # 保留统计信息和元数据字段
keep_hashes_in_res_ds: true # 保留哈希字段
统计信息导出¶
本地模式下,数据包含 __dj__stats__ 或 __dj__meta__ 列时,会额外导出一份统计文件:
outputs/
├── result.jsonl
└── result_stats.jsonl
统计文件只包含数据中已有的统计和元数据列。直接使用 Python Exporter 时,可以通过 export_stats=False 关闭该文件的导出。
Ray 模式将统计信息与主数据集一起导出。需要保留它们时,请设置 keep_stats_in_res_ds: true;Ray 不会额外生成独立的 _stats.jsonl 文件。
WebDataset 导出(Ray 模式)¶
在 Ray 模式下,可以使用自定义字段映射导出为 WebDataset 格式:
export_path: ./outputs/webdataset
export_type: webdataset
export_extra_args:
field_mapping:
txt: "text"
png: "images"
json: "metadata"
API 参考¶
Exporter(默认模式)¶
from data_juicer.core.exporter import Exporter
exporter = Exporter(
export_path="./outputs/result.jsonl",
export_type="jsonl",
export_shard_size=0,
export_in_parallel=True,
num_proc=4,
keep_stats_in_res_ds=False,
keep_hashes_in_res_ds=False,
)
exporter.export(dataset)
RayExporter(Ray 模式)¶
from data_juicer.core.ray_exporter import RayExporter
exporter = RayExporter(
export_path="./outputs/result.jsonl",
export_type="jsonl",
export_shard_size=268435456,
keep_stats_in_res_ds=False,
keep_hashes_in_res_ds=False,
)
exporter.export(ray_dataset)
故障排除¶
导出格式不支持:
# 检查支持的格式
# 默认模式:jsonl, json, parquet
# Ray 模式:jsonl, json, parquet, csv, tfrecords, webdataset, lance
并行导出比预期慢:
# 禁用并行导出
export_in_parallel: false
S3 导出权限错误:
# 验证凭证
aws s3 ls s3://your-bucket/
# 检查 export_aws_credentials 是否已配置
生成的分片文件过多:
# 增大分片大小
export_shard_size: 1073741824 # 1 GB
导出的数据集中缺少统计信息:
# 在结果数据集中保留统计信息
keep_stats_in_res_ds: true
# 本地模式也可查看独立的统计文件:result_stats.jsonl