使用 DuckDB 访问 Hugging Face 上的 15 万+ 数据集
简而言之:DuckDB 现在可以通过 hf://
前缀从 Hugging Face 读取数据。
我们很高兴地宣布,我们在 DuckDB 中添加了对 hf://
路径的支持,从而可以访问超过 150,000 个用于人工智能的数据集。我们与 Hugging Face 合作,普及用于训练和评估 AI 模型的数据集的访问、操作和探索。
数据集仓库
Hugging Face 是一个流行的中心平台,用户可以在这里存储、共享和协作处理机器学习模型、数据集和其他资源。
一个数据集通常包含以下内容
- 一个
README
文件:这是一个纯文本文件,提供了仓库及其内容的概述。它通常描述目的、用法以及特定要求或依赖项。 - 数据文件:根据仓库的类型,它可以包含数据文件,如 CSV、Parquet、JSONL 等。这些是仓库的核心组成部分。
一个典型的仓库看起来像这样
使用 hf://
路径读取
在处理数据时,您通常需要读取各种格式的文件(例如 CSV、JSONL 和 Parquet)。从 v0.10.3 版本开始,DuckDB 通过 httpfs
扩展原生支持 hf://
路径,从而可以轻松访问所有这些格式。
现在,可以使用以下 URL 模式查询它们
hf://datasets/⟨my_username⟩/⟨my_dataset⟩/⟨path_to_file⟩
例如,要读取 CSV 文件,可以使用以下查询
SELECT *
FROM 'hf://datasets/datasets-examples/doc-formats-csv-1/data.csv';
其中
datasets-examples
是用户/组织的名称doc-formats-csv-1
是数据集仓库的名称data.csv
是仓库中的文件路径
查询结果是
种类 | 声音 |
---|---|
狗 | 汪 |
猫 | 喵 |
宝可梦 | 皮卡 |
人类 | 你好 |
要读取 JSONL 文件,您可以运行
SELECT *
FROM 'hf://datasets/datasets-examples/doc-formats-jsonl-1/data.jsonl';
最后,对于读取 Parquet 文件,请使用以下查询
SELECT *
FROM 'hf://datasets/datasets-examples/doc-formats-parquet-1/data/train-00000-of-00001.parquet';
这些命令中的每一个都从指定的文件格式读取数据,并以结构化的表格格式显示它。根据您正在处理的文件格式选择适当的命令。
创建本地表
为了避免每次查询都访问远程端点,您可以通过运行 CREATE TABLE ... AS
命令将数据保存在 DuckDB 表中。例如
CREATE TABLE data AS
SELECT *
FROM 'hf://datasets/datasets-examples/doc-formats-csv-1/data.csv';
然后,只需按如下方式查询 data
表
SELECT *
FROM data;
多个文件
在处理大型数据集时,您可能需要同时查询多个文件。让我们看一个使用 cais/mmlu(衡量大规模多任务语言理解)数据集的快速示例。此数据集捕获了一个测试,该测试包含来自各个知识分支的多项选择题。它涵盖了 57 个任务,包括小学数学、美国历史、计算机科学、法律等。为了在此测试中获得高精度,AI 模型必须具备广泛的世界知识和解决问题的能力。
首先,让我们统计单个文件中的行数。要从 cais/mmlu 数据集中的单个文件中获取行数,请使用以下查询
SELECT count(*) AS count
FROM 'hf://datasets/cais/mmlu/astronomy/dev-00000-of-00001.parquet';
计数 |
---|
5 |
同样,对于同一数据集中的另一个文件(test-00000-of-00001.parquet
),我们可以运行
SELECT count(*) AS count
FROM 'hf://datasets/cais/mmlu/astronomy/test-00000-of-00001.parquet';
计数 |
---|
152 |
要查询特定格式下的所有文件,您可以使用 glob 模式。以下是如何计算与模式 *.parquet
匹配的所有文件中的行数
SELECT count(*) AS count
FROM 'hf://datasets/cais/mmlu/astronomy/*.parquet';
计数 |
---|
173 |
通过使用 glob 模式,您可以有效地处理大型数据集并跨多个文件执行全面查询,从而简化您的数据检查和处理任务。在这里,您可以看到如何查找天文学中包含单词“planet”的问题
SELECT count(*) AS count
FROM 'hf://datasets/cais/mmlu/astronomy/*.parquet'
WHERE question LIKE '%planet%';
计数 |
---|
21 |
并查看一些示例
SELECT question
FROM 'hf://datasets/cais/mmlu/astronomy/*.parquet'
WHERE question LIKE '%planet%'
LIMIT 3;
问题 |
---|
为什么小行星带所在的位置没有行星? |
在太阳系的哪个行星上可以找到大红斑? |
行星的岩石圈是由以下层组成 |
版本控制和修订
在 Hugging Face 仓库中,数据集版本或修订是不同的数据集更新。每个版本都是特定时间的快照,允许您跟踪更改和改进。在 git 术语中,它可以理解为一个分支或特定的提交。
您可以使用以下 URL 查询不同的数据集版本/修订
hf://datasets/my_username/my_dataset@my_branch/path_to_file
例如
SELECT *
FROM 'hf://datasets/datasets-examples/doc-formats-csv-1@~parquet/**/*.parquet';
种类 | 声音 |
---|---|
狗 | 汪 |
猫 | 喵 |
宝可梦 | 皮卡 |
人类 | 你好 |
之前的查询将读取 ~parquet
修订下的所有 parquet 文件。这是一个特殊的分支,Hugging Face 会自动生成每个数据集的 Parquet 文件,以实现高效扫描。
身份验证
在 DuckDB Secrets Manager 中配置您的 Hugging Face 令牌以访问私有或门控数据集。首先,访问 Hugging Face 设置 – 令牌以获取您的访问令牌。其次,使用 DuckDB 的 Secrets Manager在您的 DuckDB 会话中设置它。DuckDB 支持两个用于管理密钥的提供程序
-
CONFIG
:用户必须将所有配置信息传递到CREATE SECRET
语句中。要使用CONFIG
提供程序创建密钥,请使用以下命令CREATE SECRET hf_token ( TYPE huggingface, TOKEN 'your_hf_token' );
-
credential_chain
:自动尝试获取凭据。对于 Hugging Face 令牌,它将尝试从~/.cache/huggingface/token
获取。要使用credential_chain
提供程序创建密钥,请使用以下命令CREATE SECRET hf_token ( TYPE huggingface, PROVIDER credential_chain );
结论
DuckDB 中 hf://
路径的集成显着简化了对 Hugging Face 上超过 150,000 个数据集的访问和查询。此功能普及了数据操作和探索,使用户可以更轻松地与各种文件格式(如 CSV、JSON、JSONL 和 Parquet)进行交互。通过使用 hf://
路径,用户可以执行复杂的查询,高效地处理大型数据集,并利用 Hugging Face 仓库的广泛资源。
该集成支持无缝访问单个文件、使用 glob 模式的多个文件以及不同的数据集版本。DuckDB 的强大功能确保了灵活且简化的数据处理体验。此集成是使 AI 数据集访问对研究人员和开发人员更易于访问和高效的重大飞跃,从而促进创新并加速机器学习的进步。
想了解更多关于利用 DuckDB 与 Hugging Face 数据集的信息?探索详细指南。