2015-04-07 86 views
2

我使用了Java的API,即Apache-Spark 1.2.0,並創建了兩個解析向量,如下所示。如何在Spark中使用Java組合或合併兩個稀疏向量?

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}); 

我怎樣才能通過組合v1v2形成了新的載體v3,所以結果應該是:(5, [0,2,3,4],[1.0, 3.0, 4.0, 5.0])

+0

你可以編寫一個方法,添加第一個數字並連接數組? – Loki

+0

這也是可行的。我想知道在這個目的下,spark mllib中是否有一個現有的工具。 – HappyCoding

回答

2

我發現這個問題已經一年,仍懸而未決。在這裏,我通過自己編寫一個輔助函數來解決問題,如下所示。

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; 
    } 

} 
相關問題