如何使用Java在Spark中组合或合并两个稀疏向量?
我使用了Java的API,即ApacheSpark1.2.0,并创建了两个解析向量,如下所示如何使用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
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中是否存在用于此目的的实用程序。