如何获取具备完整线性代数方法的Flink ML DenseVector API?
获取具备完整线性代数方法的Flink DenseVector API
问题原因梳理
你遇到的API差异源于Flink ML的版本演进与结构重构:
- Flink 1.3的
org.apache.flink.ml.math.DenseVector是早期旧实现,仅保留基础点积方法,已被弃用。 - Flink 1.12的
org.apache.flink.ml.common.linalg.DenseVector是Flink ML并入Flink主项目阶段的实现,将求和、范数等线性代数方法直接封装在类中。 - Flink ML 2.x(独立为子项目后)的
org.apache.flink.ml.linalg.DenseVector做了API重构,把线性代数操作从类本身移到了VectorOperators工具类,并非功能缺失,只是调用方式改变。
解决方案
方案1:使用Flink 1.12系列的完整DenseVector实现
若想直接使用类自带的sum()、norm()等方法,引入对应版本的依赖(需与Flink核心版本匹配):
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-ml-lib_2.12</artifactId> <version>1.12.7</version> <!-- 选择1.12系列的稳定版本 --> </dependency>
此时导入类为org.apache.flink.ml.common.linalg.DenseVector,可直接调用其内置线性代数方法。
方案2:适配Flink ML 2.x的重构API
若倾向使用最新Flink ML版本,通过VectorOperators工具类实现所需操作:
import org.apache.flink.ml.linalg.DenseVector; import org.apache.flink.ml.linalg.VectorOperators; // 示例:求和、L2范数、点积 DenseVector vector = new DenseVector(new double[]{1.0, 2.0, 3.0}); double sum = vector.reduce(VectorOperators.SUM); double l2Norm = vector.norm(VectorOperators.L2_NORM); double dotProduct = vector.dot(new DenseVector(new double[]{4.0, 5.0, 6.0}));
依赖可使用最新稳定版:
<dependency> <groupId>org.apache.flink</groupId> <artifactId>flink-ml-lib_2.12</artifactId> <version>2.2.0</version> </dependency>
内容的提问来源于stack exchange,提问作者drsealks
相关产品推荐
相关产品推荐

