传递参数的匿名方法

时间:2017-10-02 07:53:07

标签: java scala apache-spark java-8 spark-graphx

我在Pregel中创建了一个具有以下签名的方法:

Graph<VD, ED> org.apache.spark.graphx.Pregel.apply(Graph<VD, ED> arg0,
A arg1, int arg2, EdgeDirection arg3, 
Function3<Object, VD, A, VD> arg4, 
Function1<EdgeTriplet<VD, ED>, Iterator<Tuple2<Object, A>>> arg5, 
Function2<A, A, A> arg6, ClassTag<VD> arg7, 
ClassTag<ED> arg8, ClassTag<A> arg9)

如图所示,我正在调用该方法:

Methods implemented

但我面临以下错误

The method apply(Graph<VD,ED>, A, int, EdgeDirection, 
Function3<Object,VD,A,VD>, Function1<EdgeTriplet<VD,ED>,Iterator<Tuple2<Object,A>>>, 
Function2<A,A,A>, ClassTag<VD>, ClassTag<ED>, ClassTag<A>) in the type Pregel is not applicable for the arguments 
(Graph<Row,Row>, double, int, EdgeDirection, new Function3<Row,Double,Double,Double>(){}, 
new Function1<EdgeTriplet<Double,Double>,Iterator<Tuple2<Long,Double>>>(){}, 
new Function2<Double,Double,Double>(){}, ClassTag<VD>, ClassTag<ED>, ClassTag<A>)

在调用此方法时我在这里犯的错误是什么?

1 个答案:

答案 0 :(得分:3)

好吧,你的仿制品都搞砸了。根据第一个参数,VDED都是Row。这意味着arg4应该是Function3<Object, Row, Double, Row>类型,而不是Function3<Row,Double,Double,Double>。其他参数同样关闭。在您撰写Double的许多地方,它应该是Row(或者所有Row应该是Double s)。只需记下每种通用类型应具有的值,并检查您的参数是否与该语句匹配。