You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

安装FlinkML DenseVector依赖:为何存在两种不同实现?

原因说明

Flink ML在版本迭代中做了包结构重构:

  • Flink 1.12及更早版本里,带完整数学操作的DenseVector位于org.apache.flink.ml.common.linalg包下,属于Flink主项目的ML模块。
  • Flink ML 2.x(如你使用的2.1.0)已成为独立项目,DenseVector被移至org.apache.flink.ml.linalg包,且API做了精简,原有数学操作被拆分或调整。

两种解决方案

如果必须使用旧版带完整数学操作的DenseVector,需要引入Flink 1.12对应的ML依赖,同时确保项目的Flink核心版本也为1.12.x,避免版本冲突:

<dependency>
    <groupId>org.apache.flink</groupId>
    <artifactId>flink-ml</artifactId>
    <version>1.12.7</version> <!-- 推荐用1.12系列最新小版本,稳定性更好 -->
</dependency>

注意:此依赖属于Flink 1.12主发布的一部分,并非独立的Flink ML 2.x包。

如果不想回退版本,可以基于新版org.apache.flink.ml.linalg.DenseVector自行封装常用数学操作,比如点积的实现示例:

import org.apache.flink.ml.linalg.DenseVector;

public class VectorMathUtils {
    // 实现点积计算
    public static double dot(DenseVector vec1, DenseVector vec2) {
        if (vec1.size() != vec2.size()) {
            throw new IllegalArgumentException("两个向量维度必须一致");
        }
        double sum = 0.0;
        for (int i = 0; i < vec1.size(); i++) {
            sum += vec1.get(i) * vec2.get(i);
        }
        return sum;
    }

    // 可扩展其他操作,比如向量加法
    public static DenseVector add(DenseVector vec1, DenseVector vec2) {
        if (vec1.size() != vec2.size()) {
            throw new IllegalArgumentException("两个向量维度必须一致");
        }
        double[] result = new double[vec1.size()];
        for (int i = 0; i < vec1.size(); i++) {
            result[i] = vec1.get(i) + vec2.get(i);
        }
        return new DenseVector(result);
    }
}

内容的提问来源于stack exchange,提问作者drsealks

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 21:50:31