fugue

GitHub
2.1k 101 简单 1 次阅读 3天前Apache-2.0开发框架数据工具
AI 解读 由 AI 自动生成,仅供参考

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 写法直接驾驭大规模集群算力。

运行环境要求

操作系统
  • 未说明
GPU

未说明

内存

未说明

依赖
notesFugue 是一个分布式计算统一接口,核心依赖 Pandas。若需使用特定功能(如 FugueSQL、Spark/Dask/Ray 后端),需安装对应的 extras(例如 pip install fugue[sql,spark])。若已独立安装 Spark 或 DuckDB,Fugue 可自动识别而无需安装对应 extras。使用 C++ SQL 解析器(cpp_sql_parser)可显著提升性能,但部分平台可能需要 C++ 编译器进行构建。在 Binder 等低配环境中运行分布式框架(如 Spark)时性能会严重下降。
python3.8+
pandas
pyarrow
fugue-sql-antlr (可选,用于 FugueSQL)
pyspark (可选,用于 Spark 后端)
dask (可选,用于 Dask 后端)
ray (可选,用于 Ray 后端)
duckdb (可选,用于 DuckDB 后端)
polars (可选,用于 Polars 后端)
ibis (可选,用于 Ibis 后端)
fugue hero image

快速开始

PyPI版本 PyPI Python版本 PyPI许可证 Codecov Codacy徽章 下载量

教程 API文档 在Slack上与我们交流!
Jupyter Book徽章 文档 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执行引擎上。输出的schemaparams被传递给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 上运行速度较慢,因为 binder 上的机器性能不足以支持像 Spark 这样的分布式框架。并行执行可能会变为串行执行,因此一些性能对比示例可能无法给出准确的结果。

使用 Docker

或者,您可以在自己的机器上运行以下 Docker 镜像,以获得较好的性能:

docker run -p 8888:8888 fugueproject/tutorials:latest

Jupyter Notebook 扩展

FugueSQL 配备了一个配套的 notebook 扩展,允许用户使用 %%fsql 单元魔法命令。该扩展还为 FugueSQL 单元提供语法高亮显示功能,适用于经典 notebook 和 Jupyter Lab。更多详情请参阅 安装说明

FugueSQL 动画

生态系统

作为抽象层,Fugue 可以与许多其他开源项目无缝集成。

Python 后端:

FugueSQL 后端:

  • Pandas - FugueSQL 可以在 Pandas 上运行
  • Duckdb - 进程内 SQL OLAP 数据库管理系统
  • dask-sql - Dask 的 SQL 接口
  • SparkSQL
  • BigQuery
  • Trino

Fugue 可以作为后端使用,或与以下项目集成:

已注册的第三方扩展(主要用于 Fugue SQL)包括:

  • Pandas plot - 使用 matplotlib 或 plotly 可视化数据
  • Seaborn - 使用 seaborn 可视化数据
  • WhyLogs - 可视化数据分析结果
  • Vizzu - 使用 ipyvizzu 可视化数据

社区与贡献

欢迎随时通过 Slack 联系我们。我们也有 贡献指南

案例研究

提及的应用

更多资源

查看我们最新的会议演讲和相关内容。如需更完整的列表,请访问教程中的 内容 页面。

博客

会议

版本历史

v0.9.72026/02/20
0.9.62026/01/30
0.9.52026/01/28
0.9.42025/12/30
0.9.32025/12/02
0.9.22025/10/31
0.9.2.dev22025/03/29
0.9.2.dev12024/06/28
0.9.12024/06/14
0.9.02024/04/29
0.9.0.dev42024/04/28
0.9.0.dev32024/01/21
0.9.0.dev22024/01/14
0.9.0.dev12024/01/14
0.8.72023/11/09
0.8.7.dev82023/11/09
0.8.7.dev72023/11/08
0.8.7.dev62023/10/27
0.8.7.dev52023/10/09
0.8.7.dev42023/08/20

常见问题

相似工具推荐

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|今天
开发框架图像Agent

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 真正成长为懂上

139k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

107.7k|★★☆☆☆|2天前
开发框架图像Agent

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 提供专业版解决方案,具备品牌定制、细粒度权限控制、内部知识库整合及安全审计等功能,满足公司对数据隐私和个性化管理的高标准要求。

87.6k|★★☆☆☆|今天
开发框架语言模型

ML-For-Beginners

ML-For-Beginners 是由微软推出的一套系统化机器学习入门课程,旨在帮助零基础用户轻松掌握经典机器学习知识。这套课程将学习路径规划为 12 周,包含 26 节精炼课程和 52 道配套测验,内容涵盖从基础概念到实际应用的完整流程,有效解决了初学者面对庞大知识体系时无从下手、缺乏结构化指导的痛点。 无论是希望转型的开发者、需要补充算法背景的研究人员,还是对人工智能充满好奇的普通爱好者,都能从中受益。课程不仅提供了清晰的理论讲解,还强调动手实践,让用户在循序渐进中建立扎实的技能基础。其独特的亮点在于强大的多语言支持,通过自动化机制提供了包括简体中文在内的 50 多种语言版本,极大地降低了全球不同背景用户的学习门槛。此外,项目采用开源协作模式,社区活跃且内容持续更新,确保学习者能获取前沿且准确的技术资讯。如果你正寻找一条清晰、友好且专业的机器学习入门之路,ML-For-Beginners 将是理想的起点。

85k|★★☆☆☆|今天
图像数据工具视频

ragflow

RAGFlow 是一款领先的开源检索增强生成(RAG)引擎,旨在为大语言模型构建更精准、可靠的上下文层。它巧妙地将前沿的 RAG 技术与智能体(Agent)能力相结合,不仅支持从各类文档中高效提取知识,还能让模型基于这些知识进行逻辑推理和任务执行。 在大模型应用中,幻觉问题和知识滞后是常见痛点。RAGFlow 通过深度解析复杂文档结构(如表格、图表及混合排版),显著提升了信息检索的准确度,从而有效减少模型“胡编乱造”的现象,确保回答既有据可依又具备时效性。其内置的智能体机制更进一步,使系统不仅能回答问题,还能自主规划步骤解决复杂问题。 这款工具特别适合开发者、企业技术团队以及 AI 研究人员使用。无论是希望快速搭建私有知识库问答系统,还是致力于探索大模型在垂直领域落地的创新者,都能从中受益。RAGFlow 提供了可视化的工作流编排界面和灵活的 API 接口,既降低了非算法背景用户的上手门槛,也满足了专业开发者对系统深度定制的需求。作为基于 Apache 2.0 协议开源的项目,它正成为连接通用大模型与行业专有知识之间的重要桥梁。

77.1k|★★★☆☆|昨天
Agent图像开发框架