Hugging Face Hub 支持用 DuckDB 对 5 万多个数据集运行 SQL 查询
DuckDB: analyze 50,000+ datasets stored on the Hugging Face Hub
Hugging Face Hub 新增功能:可用 DuckDB 对 Hub 上存储的任意数据集运行 SQL 查询。
官方介绍了用 DuckDB 直接对 Hub 上 5 万多个数据集跑 SQL 的方法,含 Parquet 转换与 httpfs 查询的完整可复用步骤。
Hugging Face Hub 致力于为所有人提供数据集的开放访问,并为用户提供探索和理解这些数据集的工具。你可以找到许多用于训练流行大型语言模型(LLM)的数据集,例如 Falcon、Dolly、MPT 和 StarCoder。还有用于解决数据集中公平性和偏见问题的工具,例如 Disaggregators,以及用于预览数据集内示例的工具,例如 Dataset Viewer。
使用 Dataset Viewer 预览 OpenAssistant 数据集。
我们很高兴地分享,我们最近添加了另一项功能,帮助你在 Hub 上分析数据集;你可以使用 DuckDB 对 Hub 上存储的任何数据集运行 SQL 查询!根据 2022 年 StackOverflow 开发者调查,SQL 是第三受欢迎的编程语言。我们还想要一个专为运行分析查询而设计的快速数据库管理系统(DBMS),这就是为什么我们很高兴与 DuckDB 集成。我们希望这能让更多用户访问和分析 Hub 上的数据集!
TLDR
dataset viewer 会自动将 Hub 上的所有公共数据集转换为 Parquet 文件,你可以通过点击数据集页面顶部的“Auto-converted to Parquet”按钮来查看。你还可以通过一个简单的 HTTP 调用访问 Parquet 文件 URL 列表。
r = requests.get("https://datasets-server.huggingface.co/parquet?dataset=blog_authorship_corpus")
j = r.json()
urls = [f['url'] for f in j['parquet_files'] if f['split'] == 'train']
urls
['https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet',
'https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00001-of-00002.parquet']
创建到 DuckDB 的连接,并安装和加载 httpfs 扩展以允许读写远程文件:
import duckdb
url = "https://huggingface.co/datasets/blog_authorship_corpus/resolve/refs%2Fconvert%2Fparquet/blog_authorship_corpus/blog_authorship_corpus-train-00000-of-00002.parquet"
con = duckdb.connect()
con.execute("INSTALL httpfs;")
con.execute("LOAD httpfs;")
连接后,你就可以开始编写 SQL 查询了!
con.sql(f"""SELECT horoscope,
count(*),
AVG(LENGTH(text)) AS avg_blog_length
FROM '{url}'
GROUP BY horoscope
ORDER BY avg_blog_length
DESC LIMIT(5)"""
)
要了解更多信息,请查看文档。
从数据集到 Parquet
Parquet 文件是列式的,这使得它们在存储、加载和分析方面更高效。当你处理大型数据集时,这一点尤其重要,而在 LLM 时代,我们看到越来越多这样的数据集。为了支持这一点,dataset viewer 会自动将 Hub 上的任何公共数据集转换并发布为 Parquet 文件。Parquet 文件的 URL 可以通过 /parquet 端点获取。
使用 DuckDB 分析
DuckDB 在运行复杂分析查询方面提供了令人印象深刻的性能。它能够直接在远程 Parquet 文件上执行 SQL 查询,而没有任何额外开销。借助 httpfs 扩展,DuckDB 能够使用 /parquet 端点提供的 URL 查询远程文件,例如存储在 Hub 上的数据集。DuckDB 还支持查询多个 Parquet 文件,这非常方便,因为 dataset viewer 会将大型数据集分片为更小的 500MB 块。
展望未来
了解数据集内部的内容对于开发模型很重要,因为它会以各种方式影响模型质量!通过允许用户对 Hub 数据集编写和执行任何 SQL 查询,这是我们实现数据集开放访问并帮助用户更加了解数据集内容的另一种方式。我们很高兴你能尝试一下,也期待你的分析能揭示出什么样的洞见!
来源:Hugging Face:Blog(RSS) · huggingface.co