Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Java在Spark中组合或合并两个稀疏向量?_Java_Apache Spark_Sparse Matrix_Apache Spark Mllib - Fatal编程技术网

如何使用Java在Spark中组合或合并两个稀疏向量?

如何使用Java在Spark中组合或合并两个稀疏向量?,java,apache-spark,sparse-matrix,apache-spark-mllib,Java,Apache Spark,Sparse Matrix,Apache Spark Mllib,我使用了Java的API,即ApacheSpark1.2.0,并创建了两个解析向量,如下所示 Vector v1 = Vectors.sparse(3, new int[]{0, 2}, new double[]{1.0, 3.0}); Vector v2 = Vectors.sparse(2, new int[]{0, 1}, new double[]{4,5}); 我怎样才能得到一个新的向量,它是由v1和v2组合而成的,所以结果应该是:(5,[0,2,3,4],[1.0,3.0,4.0,5

我使用了Java的API,即ApacheSpark1.2.0,并创建了两个解析向量,如下所示

Vector v1 = Vectors.sparse(3, new int[]{0, 2}, new double[]{1.0, 3.0});
Vector v2 = Vectors.sparse(2, new int[]{0, 1}, new double[]{4,5});

我怎样才能得到一个新的向量,它是由
v1
v2
组合而成的,所以结果应该是:
(5,[0,2,3,4],[1.0,3.0,4.0,5.0])
我发现这个问题已经一年了,仍然悬而未决。在这里,我通过自己编写一个helper函数来解决这个问题,如下所示

public static SparseVector combineSparseVectors(SparseVector... svs) {
    int size = 0;
    int nonzeros = 0;
    for (SparseVector sv : svs) {
        size += sv.size();
        nonzeros += sv.indices().length;
    }

    if (nonzeros != 0) {
        int[] indices = new int[nonzeros];
        double[] values = new double[nonzeros];

        int pointer_D = 0;
        int totalPt_D = 0;
        int pointer_V = 0;
        for (SparseVector sv : svs) {
            int[] indicesSV = sv.indices();
            for (int i : indicesSV) {
                indices[pointer_D++] = i + totalPt_D;
            }
            totalPt_D += sv.size();

            double[] valuesSV = sv.values();
            for (double d : valuesSV) {
                values[pointer_V++] = d;
            }

        }
        return new SparseVector(size, indices, values);
    } else {
        System.out.println("all zeroes");
        return null;
    }

}

您可以编写一个方法,将第一个数字相加并合并数组?这也是可行的。我想知道spark mllib中是否存在用于此目的的实用程序。