从Spark(Java)

时间:2015-09-30 09:43:36

标签: java matrix apache-spark distributed-computing

我试图将两个大矩阵相乘,并为每行产生相当大(50000x50000)的矩阵找到最大20个元素的索引。我希望将Spark与java一起使用。我发现如果我将它们存储为BlockMatrices,我可以将分布式矩阵相乘。但是否则似乎没有更复杂的操作可用于分布式矩阵而且我被卡住了。做这种手术的最佳方法是什么?到目前为止,我所用的简单代码看起来像这样:

JavaSparkContext sc = new JavaSparkContext(conf);
BlockMatrix A = getBlockMatrixA(sc);
BlockMatrix B = getBlockMatrixB(sc);
BlockMatrix AB = A.multiply(B);

1 个答案:

答案 0 :(得分:0)

这样的东西应该有希望做到这一点,虽然我还没有测试过它:

RDD<IndexedRow> byRow = AB.toIndexedRowMatrix().rows();
JavaRDD<IndexedRow> dummyRDD = sc.parallelize(new ArrayList<IndexedRow>());
JavaRDD<IndexedRow> javaByRow = dummyRDD.wrapRDD(byRow);
JavaPairRDD<Long, List<Long>> top20byRow = javaByRow.mapToPair(
new PairFunction<IndexedRow, Long, List<Long>>() {
    public Tuple2<Long, List<Long>> call(IndexedRow ir) throws Exception {
        return new Tuple2<Long, List<Long>>(ir.index(), getTopN(ir.vector(),N));
    }
});