Apache DataFu 介绍与选型指南

Apache DataFu 认知篇选型指南:多组件版本基准(Spark 2.1.0/Pig 1.6.1/Hourglass 1.6.1)、三组件分工与去重/倾斜 join 等特性、官方示例快速上手及 Pig UDF/Spark 工具库对比。

Apache DataFuApache DataFuApache PigSpark2026/10/18

Apache DataFu 介绍与选型指南

目标:本文为 Apache DataFu 的认知篇选型指南,介绍其组件版本基准、核心概念、功能特性与 Pig UDF/Spark 工具库同类对比。本文不做本地安装实测,全部关键论断均基于 Apache DataFu 官网、Maven Central 与 GitHub 联网查证,查询日期为 2026-10-18。

一、信息基准

  • 查询日期:2026-10-18。
  • 版本依据:Apache DataFu 为多组件项目,官方下载页明示「datafu-pig 与 datafu-hourglass 的最新版本与 datafu-spark 的最新版本并不相同」,故本文标题不带统一版本号,按官方渠道实查的组件版本基准如下(查询日期 2026-10-18):
组件最新版本(实查渠道)备注
源码发行包apache-datafu-2.1.0官方 Download 页当前发行;GitHub tag 更新时间 2025-04-08(tags.atom)
datafu-spark2.1.0(Scala 2.12:datafu-spark_2.12,Apache Maven 仓库)官方 Javadoc 目录为 /docs/spark/2.1.0/
datafu-pig1.6.1(Maven Central org.apache.datafu:datafu-pig)官方 Javadoc 目录为 /docs/datafu/1.6.1/
datafu-hourglass1.6.1(官方 Javadoc 目录 /docs/hourglass/1.6.1/)增量 MapReduce 框架

二、软件概述

Apache DataFu(Apache License 2.0,ASF 顶级项目官网)是面向 Hadoop 大规模数据处理的工具库集合,官方首页定义其由三个库组成(来源:datafu.apache.org/,2026-10-18 查询):

  • Apache DataFu Spark:面向 Apache Spark 的工具函数与 UDF 集合,源自 PayPal 内部项目、2019 年开源,自 2017 年起在 PayPal 生产工作流中使用;
  • Apache DataFu Pig:面向 Apache Pig 的 UDF 与宏集合,2010 年开源、2013 年 9 月达 1.0,曾长期在 LinkedIn 生产使用;
  • Apache DataFu Hourglass:基于 Hadoop MapReduce 的增量处理框架,面向滑动窗口类重复计算,官方称可将计算资源消耗降低 50-95%。

三、核心架构与核心概念

3.1 三组件分工

组件宿主平台形态典型定位
datafu-sparkApache SparkScala UDF/DataFrame 扩展方法与聚合器去重、倾斜 join、范围 join 等常见数仓操作的工具化
datafu-pigApache PigPig UDF 与宏数据挖掘与统计类算子(采样、哈希、会话化等)
datafu-hourglassHadoop MapReduce增量处理框架按天/周定期重算的滑动窗口作业增量复用

(来源:datafu.apache.org/ 首页三组件描述,2026-10-18 查询。)

3.2 DataFu Spark 的扩展点

DataFu Spark 通过两种方式暴露能力:一是 DataFrameOps 等隐式类为 DataFrame 增加扩展方法(如 dedupWithOrder),二是聚合器类 UDAF(如 count distinct up to);同时支持在 Spark Scala 中调用 Python 代码、或在 PySpark 中调用 Scala 代码的桥接工具(来源:datafu.apache.org/docs/spark/getting-started.html Examples 列表,2026-10-18 查询)。

3.3 Hourglass 的增量思想

Hourglass 针对按日切片重算的滑动窗口作业:将前序已算出的中间结果与新增一天的数据合并计算,避免全量重算,这是其资源节省的来源(来源:官网首页 Hourglass 段落与官方论文链接,2026-10-18 查询)。

四、功能特性

  • DataFrame 去重族:dedupWithOrder(按 key 与排序取最新一条)、dedupWithCombiner(用 UDAF 做 map 端聚合的同功能变体)、dedupTopN(每个 key 保留多条)(来源:spark/getting-started.html,2026-10-18 查询)。
  • 特殊 join:倾斜 join(小表仍大到无法放入内存时的 broadcast 优化变体)与数值/区间 join(来源:spark/getting-started.html Examples,2026-10-18 查询)。
  • 近似计数:count distinct up to 聚合器,仅需验证最小去重行数时的高效实现(来源:同上,2026-10-18 查询)。
  • 跨语言桥接:Spark Scala 调 Python、PySpark 调 Scala(来源:同上,2026-10-18 查询)。
  • 全部 UDF 单元测试保障:官方对三个库均声明代码经过单元测试(来源:官网首页各组件段落,2026-10-18 查询)。
  • 官方兼容矩阵(datafu-spark,来源:spark/getting-started.html Compatibility Matrix,2026-10-18 查询):
DataFu SparkSpark
1.8.02.2.3、2.3.3、2.4.4–2.4.5
2.0.03.0.x–3.1.x
2.1.03.0.x–3.4.2

五、快速上手

以下均引自官方文档(来源标注于各段),本文未本地运行。

依赖引入(官方 Download 页原文,Maven):

<dependency>
  <groupId>org.apache.datafu</groupId>
  <artifactId>datafu-spark</artifactId>
  <version>2.1.0</version>
</dependency>

(Gradle 写法 compile "org.apache.datafu:datafu-spark:2.1.0"、SBT 写法 libraryDependencies += "org.apache.datafu" %% "datafu-spark" % "2.1.0" intransitive 同见该页。)

官方 Getting Started 的基础示例:将 jar 加入 Spark classpath 后导入 DataFrameOps,对同一客户存在多行更新记录的 customers 表取每个客户的最新记录(来源:https://datafu.apache.org/docs/spark/getting-started.html Basic Example 节):

import datafu.spark.DataFrameOps._

val customers = spark.read.format("csv").option("header", "true").load("customers.csv")

csv.dedupWithOrder($"id", $"date_updated".desc).show

官方同时说明还有 dedupWithCombiner(map 端聚合变体)与 dedupTopN(每 key 保留多条)两个变体(来源:同页 Next 段落)。

六、适用场景与限制

6.1 适用场景

  • Spark 数仓通用算子补齐:最新记录去重、倾斜 join、区间 join 等高频但有实现门槛的 DataFrame 操作。
  • 存量 Pig 作业治理:以经过测试的 DataFu Pig UDF/宏替换自研 UDF。
  • 天级滑动窗口报表:MapReduce 体系内用 Hourglass 做增量重算降本。

6.2 限制与注意

  • 组件版本割裂:spark 2.1.0 与 pig/hourglass 1.6.1 并行,升级需分别核对(来源:download.html,2026-10-18 查询)。
  • Spark 版本窗口:datafu-spark 2.1.0 官方测试覆盖 Spark 3.0.x–3.4.2,更新的 Spark 3.5/4.x 未在官方矩阵中声明(来源:getting-started.html,2026-10-18 查询)。
  • Hourglass 绑定 MapReduce 体系:面向仍运行 MapReduce 的 Hadoop 集群,Spark 体系项目收益有限。
  • 发布节奏平缓:最近源码发行 tag 为 2025-04-08(GitHub tags.atom,2026-10-18 查询)。

七、同类选型对比

方案许可证社区活跃度(2026-10-18 查询)版本节奏兼容矩阵
Apache DataFu(DataFu Spark 2.1.0)Apache-2.0(ASF)GitHub apache/datafu 124 stars(shields.io)源码发行 2.1.0(tag 2025-04-08)Spark 3.0.x–3.4.2(官方矩阵)
PiggyBank(Apache Pig 自带 UDF 贡献库)Apache-2.0(ASF)随 Apache Pig 主项目维护无独立版本号,随 Pig 发行与 Pig 版本配套
spark-daria(mrpowers-io/spark-daria)Apache-2.0GitHub 766 stars(shields.io)Maven Central 最新 1.2.4(repo1.maven.org 查询)面向 Spark 3.x 的 DataFrame 辅助函数集
quinn(mrpowers-io/quinn)Apache-2.0(GitHub 仓库页标识)GitHub 688 stars(GitHub 仓库页,2026-10-18)无正式 GitHub Release(releases/latest 无跳转,2026-10-18 查询),按 Git 主干分发面向 Spark 3.x 的 DataFrame/列函数工具

选型建议:需要「经过 ASF 生产验证的 UDF 集合 + 去重/倾斜 join 等成品算子」选 Apache DataFu;仅缺少量 DataFrame 辅助函数且团队偏好轻依赖,可比较 spark-daria/quinn;仍在维护 Pig 作业时 PiggyBank 与 DataFu Pig 二选一,DataFu 的测试覆盖与文档更系统。

八、参考链接