本文详解 flink ml 中 densevector api 的历史演进、版本差异及如何正确引入具备完整线性代数功能(如 dot、sum、norm 等)的最新版 densevector,帮助用户规避因依赖错配导致的 api 缺失问题。
Apache Flink 的机器学习生态经历了重大架构重构:
自 Flink 1.13 起,原 flink-ml-lib 模块已被正式废弃,其核心功能(包括线性代数工具、算法实现和数据结构)已整体迁移至独立项目Apache Flink ML
。这意味着你最初在 Flink 1.12 文档中看到的 org.
apache
.flink.ml.common.linalg.DenseVector(含 dot()、sum()、normL2() 等丰富方法)属于旧版统一代码库;而当前 Maven 依赖 flink-ml-lib_2.12:2.0.0 实际对应的是更早的、功能严重受限的遗留实现(仅保留基础向量操作),已不再维护。
✅
正确使用现代 DenseVector 的步骤如下
:
弃用旧依赖
:移除所有 flink-ml-lib_* 相关依赖(如 flink-ml-lib_2.12:2.0.0);
引入新版 Flink ML Core
:在 pom.xml 中添加最新稳定版(截至 2024 年推荐使用 2.3.0 或更高):
Eclipse导入Android或其他的JAVA项目的正确方法 WORD版
本文档主要讲述的是Eclipse导入Android或其他的JAVA项目的正确方法;希望本文档会给有需要的朋友带来帮助;感兴趣的朋友可以过来看看
下载
✅ 此依赖提供的是 org.apache.flink.ml.linalg.DenseVector —— 即你在 Flink ML 官方文档 中查到的当前唯一受支持的 DenseVector 实现,它完整继承了旧版 common.linalg 的核心能力,并持续增强。
调用标准线性代数方法
(示例):
DenseVector v1 = DenseVector.of(1.0, 2.0, 3.0);
DenseVector v2 = DenseVector.of(4.0, 5.0, 6.0);
// ✅ 点积(dot product)
double dot = BLAS.dot(v1, v2); // 返回 32.0
// ✅ 向量求和(element-wise sum)
DenseVector sum = BLAS.axpy(1.0, v2, v1.clone()); // v1 + v2
// ✅ L2 范数
double norm = BLAS.nrm2(v1); // √(1²+2²+3²) ≈ 3.7417
// ✅ 其他:scale, copy, multiply, add, subtract 等均通过 BLAS 工具类统一提供
org.apache.flink
flink-ml-core
2.3.0
import org.apache.flink.ml.linalg.DenseVector;
import org.apache.flink.ml.linalg.BLAS;
⚠️ **关键注意事项**:
- `org.apache.flink.ml.linalg.DenseVector` **不直接提供 `sum()` 或 `norm()` 等实例方法** —— 所有数值计算均由静态工具类 [`BLAS`](https://nightlies.apache.org/flink/flink-ml-docs-master/api/java/org/apache/flink/ml/linalg/BLAS.html) 统一提供(符合 BLAS/LAPACK 行业规范),这是设计上的主动抽象,而非功能缺失;
- 旧版 `flink.ml.math.DenseVector`(Flink 1.3)和 `flink.ml.common.linalg.DenseVector`(Flink 1.12)均已**归档停更**,不应再用于新项目;
- 若需 Python 支持,请同步参考 [Flink ML Python API](https://nightlies.apache.org/flink/flink-ml-docs-master/docs/try-flink-ml/python/quick-start/),其底层共享同一套 Java 核心实现。
? 总结:要获得功能完备、持续维护的 DenseVector,请务必切换至 `flink-ml-core` 依赖,并通过 `BLAS` 类调用标准线性代数操作。这一演进不仅提升了 API 一致性与可扩展性,也为后续集成分布式优化器(如 Flink ML 的 `Optimizer` 接口)和自动微分奠定了坚实基础。