fugue
Fugue 是一个专为分布式计算设计的统一接口工具,旨在打破不同大数据引擎之间的壁垒。它允许开发者直接使用熟悉的 Python、Pandas、Polars 代码或 SQL 语句,在 Spark、Dask 和 Ray 等主流分布式框架上运行,而无需对原有代码进行大规模重写。
在传统开发中,将本地脚本迁移到分布式环境往往需要学习特定的 API 并重构大量逻辑,过程繁琐且容易出错。Fugue 完美解决了这一痛点,让用户能够以最小的改动成本,轻松实现现有代码的并行化与横向扩展。无论是处理海量数据的工程师,还是希望提升计算效率的数据科学家,都能利用 Fugue 快速构建端到端的工作流。
Fugue 的核心亮点在于其简洁的 API 设计(如 transform 函数)以及独特的 FugueSQL。后者不仅支持标准 SQL 操作,还能直接在查询中调用 Python 函数,实现了声明式语言与命令式代码的无缝融合。通过屏蔽底层引擎的复杂性,Fugue 让技术人员可以专注于业务逻辑本身,灵活选择最适合的计算后端,从而显著提升开发效率与系统可维护性。
使用场景
某电商数据团队需要将本地开发的 Pandas 用户画像清洗脚本,迁移到 Spark 集群以处理每日增长的亿级交易日志。
没有 fugue 时
- 重写成本高昂:必须将原本简洁的 Pandas 代码逐行改写为复杂的 PySpark API 调用,开发周期从几小时延长至数天。
- 逻辑验证困难:分布式框架的惰性执行机制导致调试繁琐,难以像本地 Pandas 那样快速断点验证中间结果。
- 技术栈割裂:数据科学家熟悉的 Python 原生逻辑与工程师维护的 Spark 作业之间存在鸿沟,协作时需反复转换代码风格。
- 资源闲置浪费:由于迁移门槛高,大量轻量级脚本仍被迫在单机运行,无法利用集群算力,导致处理超时频发。
使用 fugue 后
- 零代码重构迁移:只需在原有 Pandas 函数外包裹一层
transform()接口,即可无缝切换至 Spark 引擎执行,几乎无需修改业务逻辑。 - 统一开发体验:保留了本地 Pandas 的即时反馈特性,开发者可先用小样本在本地调试通顺,再一键提交至集群跑全量数据。
- 多引擎自由切换:同一套代码不仅能跑在 Spark 上,还能根据场景需求灵活切换到 Dask 或 Ray,无需为不同后端维护多套代码库。
- 算力弹性扩展:原本卡在单机的耗时任务,现在能自动分发到集群并行处理,将数小时的等待时间压缩至分钟级。
fugue 的核心价值在于打破了本地原型开发与分布式生产部署之间的壁垒,让数据团队能用最熟悉的 Python 写法直接驾驭大规模集群算力。
运行环境要求
- 未说明
未说明
未说明

快速开始
| 教程 | API文档 | 在Slack上与我们交流! |
|---|---|---|
![]() |
Fugue是一个统一的分布式计算接口,允许用户在Spark、Dask和Ray上运行Python、Pandas和SQL代码,且只需进行最少的修改。
Fugue最常用于:
- 并行化或扩展现有的Python和Pandas代码,通过将其移植到Spark、Dask或Ray上,而无需大量重写。
- 使用FugueSQL来定义基于Pandas、Spark和Dask DataFrame的端到端工作流。FugueSQL是一种增强型SQL接口,可以调用Python代码。
要了解Fugue与其他框架(如dbt、Arrow、Ibis、PySpark Pandas)相比如何,请参阅比较。
Fugue API
Fugue API是一组可以在Pandas、Spark、Dask和Ray上运行的函数。使用Fugue最简单的方式是transform()函数。这使用户能够通过将单个函数移植到Spark、Dask或Ray上,实现其并行执行。在下面的例子中,map_letter_to_food()函数接受一个映射字典,并将其应用到某一列上。到目前为止,这只是Pandas和Python代码(未使用Fugue)。
import pandas as pd
from typing import Dict
input_df = pd.DataFrame({"id":[0,1,2], "value": (["A", "B", "C"])})
map_dict = {"A": "Apple", "B": "Banana", "C": "Carrot"}
def map_letter_to_food(df: pd.DataFrame, mapping: Dict[str, str]) -> pd.DataFrame:
df["value"] = df["value"].map(mapping)
return df
现在,通过调用Fugue的transform()函数,将map_letter_to_food()函数移植到Spark执行引擎上。输出的schema和params被传递给transform()调用。需要提供schema是因为这是分布式框架的要求。下面的"*"表示输入的所有列都会出现在输出中。
from pyspark.sql import SparkSession
from fugue import transform
spark = SparkSession.builder.getOrCreate()
sdf = spark.createDataFrame(input_df)
out = transform(sdf,
map_letter_to_food,
schema="*",
params=dict(mapping=map_dict),
)
# out是一个Spark DataFrame
out.show()
+---+------+
| id| value|
+---+------+
| 0| Apple|
| 1|Banana|
| 2|Carrot|
+---+------+
PySpark等效于Fugue transform()
from typing import Iterator, Union
from pyspark.sql.types import StructType
from pyspark.sql import DataFrame, SparkSession
spark_session = SparkSession.builder.getOrCreate()
def mapping_wrapper(dfs: Iterator[pd.DataFrame], mapping):
for df in dfs:
yield map_letter_to_food(df, mapping)
def run_map_letter_to_food(input_df: Union[DataFrame, pd.DataFrame], mapping):
# 转换
if isinstance(input_df, pd.DataFrame):
sdf = spark_session.createDataFrame(input_df.copy())
else:
sdf = input_df.copy()
schema = StructType(list(sdf.schema.fields))
return sdf.mapInPandas(lambda dfs: mapping_wrapper(dfs, mapping),
schema=schema)
result = run_map_letter_to_food(input_df, map_dict)
result.show()
这种语法比PySpark的等效代码更简单、更清晰且更易于维护。同时,原始基于Pandas的函数并未做任何修改就移植到了Spark上。它仍然可以在Pandas DataFrame上使用。Fugue transform()还支持Dask和Ray作为执行引擎,除了默认的基于Pandas的引擎之外。
Fugue API还包含更多与Spark、Dask和Ray兼容的函数。例如,我们可以使用load()和save()来创建一个兼容Spark、Dask和Ray的端到端工作流。有关完整函数列表,请参阅顶级API。
import fugue.api as fa
def run(engine=None):
with fa.engine_context(engine):
df = fa.load("/path/to/file.parquet")
out = fa.transform(df, map_letter_to_food, schema="*")
fa.save(out, "/path/to/output_file.parquet")
run() # 在Pandas上运行
run(engine="spark") # 在Spark上运行
run(engine="dask") # 在Dask上运行
上下文中的所有函数都将在指定的后端上运行。这使得在本地执行和分布式执行之间轻松切换成为可能。
FugueSQL
FugueSQL是一种基于SQL的语言,能够在Pandas、Spark和Dask之上表达端到端的数据工作流。上面的map_letter_to_food()函数被用于下面的SQL表达式中。以下是使用Python定义的函数以及标准SQL SELECT语句的方法。
from fugue.api import fugue_sql
import json
query = """
SELECT id, value
FROM input_df
TRANSFORM USING map_letter_to_food(mapping={{mapping}}) SCHEMA *
"""
map_dict_str = json.dumps(map_dict)
# 返回Pandas DataFrame
fugue_sql(query,mapping=map_dict_str)
# 返回 Spark DataFrame
fugue_sql(query, mapping=map_dict_str, engine="spark")
安装
Fugue 可以通过 pip 或 conda 进行安装。例如:
pip install fugue
为了使用 Fugue SQL,强烈建议安装 sql 附加组件:
pip install fugue[sql]
此外,Fugue 还提供了以下安装附加组件:
- sql: 用于支持 Fugue SQL。如果不安装此附加组件,非 SQL 部分仍然可以正常工作。在 Fugue 0.9.0 之前,此附加组件已包含在 Fugue 的核心依赖中,因此无需显式安装。但从 0.9.0 版本开始,若要使用 Fugue SQL,则必须安装此附加组件。
- spark: 用于支持 Spark 作为 ExecutionEngine。
- dask: 用于支持 Dask 作为 ExecutionEngine。
- ray: 用于支持 Ray 作为 ExecutionEngine。
- duckdb: 用于支持 DuckDB 作为 ExecutionEngine,请参阅 详细信息。
- polars: 用于支持 Polars DataFrames 及其扩展功能。
- ibis: 用于在 Fugue 工作流中启用 Ibis,请参阅 详细信息。
- cpp_sql_parser: 用于启用 Fugue SQL 的 CPP antlr 解析器。它比纯 Python 解析器快 50 倍以上。对于主流的 Python 版本和平台,已经提供了预编译的二进制文件,但对于其他情况,则需要 C++ 编译器进行即时编译。
例如,一个常见的用法是:
pip install "fugue[duckdb,spark]"
请注意,如果您已经独立安装了 Spark 或 DuckDB,Fugue 会自动使用它们,而无需安装这些附加组件。
入门指南
开始使用 Fugue 的最佳方式是通过 10 分钟教程:
有关顶层 API 的更多信息,请参阅:
这些 教程 也可以通过 binder 或 Docker 在交互式笔记本环境中运行:
使用 binder
请注意,在 binder 上运行速度较慢,因为 binder 上的机器性能不足以支持像 Spark 这样的分布式框架。并行执行可能会变为串行执行,因此一些性能对比示例可能无法给出准确的结果。
使用 Docker
或者,您可以在自己的机器上运行以下 Docker 镜像,以获得较好的性能:
docker run -p 8888:8888 fugueproject/tutorials:latest
Jupyter Notebook 扩展
FugueSQL 配备了一个配套的 notebook 扩展,允许用户使用 %%fsql 单元魔法命令。该扩展还为 FugueSQL 单元提供语法高亮显示功能,适用于经典 notebook 和 Jupyter Lab。更多详情请参阅 安装说明。

生态系统
作为抽象层,Fugue 可以与许多其他开源项目无缝集成。
Python 后端:
FugueSQL 后端:
- Pandas - FugueSQL 可以在 Pandas 上运行
- Duckdb - 进程内 SQL OLAP 数据库管理系统
- dask-sql - Dask 的 SQL 接口
- SparkSQL
- BigQuery
- Trino
Fugue 可以作为后端使用,或与以下项目集成:
- WhyLogs - 数据分析
- PyCaret - 低代码机器学习
- Nixtla - 时间序列建模
- Prefect - 工作流编排
- Pandera - 数据验证
- Datacompy (由 Capital One 开发) - 比较 DataFrames
已注册的第三方扩展(主要用于 Fugue SQL)包括:
- Pandas plot - 使用 matplotlib 或 plotly 可视化数据
- Seaborn - 使用 seaborn 可视化数据
- WhyLogs - 可视化数据分析结果
- Vizzu - 使用 ipyvizzu 可视化数据
社区与贡献
案例研究
- LyftLearn 如何通过 Kubernetes、Spark 和 Fugue 实现分布式计算的民主化
- Clobotics - 使用 Fugue 和 Spark 进行大规模图像处理
- 使用 Delta Lake、Fugue 和 Spark 构建数据湖 REST API 的架构(bitsofinfo 文章)
提及的应用
- Interos, Inc. 的数据科学生产化实践(Anthony Holten 的 LinkedIn 帖子)
- Bain & Company 使用 Fugue 和 Nixtla 进行多时间序列预测(Fahad Akbar 的 LinkedIn 帖子)
更多资源
查看我们最新的会议演讲和相关内容。如需更完整的列表,请访问教程中的 内容 页面。
博客
- 为什么类 Pandas 的接口对分布式计算并不理想
- 介绍 FugueSQL — 适用于 Pandas、Spark 和 Dask DataFrame 的 SQL(Khuyen Tran 在 Towards Data Science 上的文章)
会议
版本历史
v0.9.72026/02/200.9.62026/01/300.9.52026/01/280.9.42025/12/300.9.32025/12/020.9.22025/10/310.9.2.dev22025/03/290.9.2.dev12024/06/280.9.12024/06/140.9.02024/04/290.9.0.dev42024/04/280.9.0.dev32024/01/210.9.0.dev22024/01/140.9.0.dev12024/01/140.8.72023/11/090.8.7.dev82023/11/090.8.7.dev72023/11/080.8.7.dev62023/10/270.8.7.dev52023/10/090.8.7.dev42023/08/20常见问题
相似工具推荐
stable-diffusion-webui
stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。
everything-claude-code
everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上
ComfyUI
ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。
NextChat
NextChat 是一款轻量且极速的 AI 助手,旨在为用户提供流畅、跨平台的大模型交互体验。它完美解决了用户在多设备间切换时难以保持对话连续性,以及面对众多 AI 模型不知如何统一管理的痛点。无论是日常办公、学习辅助还是创意激发,NextChat 都能让用户随时随地通过网页、iOS、Android、Windows、MacOS 或 Linux 端无缝接入智能服务。 这款工具非常适合普通用户、学生、职场人士以及需要私有化部署的企业团队使用。对于开发者而言,它也提供了便捷的自托管方案,支持一键部署到 Vercel 或 Zeabur 等平台。 NextChat 的核心亮点在于其广泛的模型兼容性,原生支持 Claude、DeepSeek、GPT-4 及 Gemini Pro 等主流大模型,让用户在一个界面即可自由切换不同 AI 能力。此外,它还率先支持 MCP(Model Context Protocol)协议,增强了上下文处理能力。针对企业用户,NextChat 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。
ML-For-Beginners
ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。
ragflow
RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。


