更改输入参数与在火花图的Vprog中创建新对象之间有什么区别

问题描述 投票:0回答:1

有我的程序:

    static class Vprog extends AbstractFunction3< Object, OddRange, OddRange, OddRange> implements Serializable {
        @Override
        public OddRange apply(Object l, OddRange self, OddRange sumOdd) {
            System.out.println(self.getS()+self.getI()+" ---> "+sumOdd.getS()+sumOdd.getI());
                self.setS(sumOdd.getS() + self.getS());
                self.setI(self.getI() + sumOdd.getI());
                return new OddRange(self.getS(), self.getI());
        }
    }

问题是如果我在Vprog类中使用像上面那样返回新的OddRange,我可以更改vertexRDD]​​>

但是,如果我使用retuen self,例如:

static class Vprog extends AbstractFunction3< Object, OddRange, OddRange, OddRange> implements Serializable {
    @Override
    public OddRange apply(Object l, OddRange self, OddRange sumOdd) {
        System.out.println(self.getS()+self.getI()+" ---> "+sumOdd.getS()+sumOdd.getI());
            self.setS(sumOdd.getS() + self.getS());
            self.setI(self.getI() + sumOdd.getI());
            return self;
    }
}

vectex不变。

我知道RDD是不可变的,但是如何正确更新spark.graphx.pregel中的vectexRDD?您能给我任何建议吗?

我发现了相同的问题:Spark Pregel is not working with Java但是我使用spark 2.3.0,也许有同样的问题?

有我的程序:静态类Vprog扩展AbstractFunction3 实现可序列化{@Override public OddRange apply(Object l,...

spark-graphx
1个回答
0
投票

我想我已经找到了答案:如果我们想更改将在Vprog中的下一个sendMsg中使用的日期,我们必须返回一个新的日期。

© www.soinside.com 2019 - 2024. All rights reserved.