我在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)
如图所示,我正在调用该方法:
但我面临以下错误
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>)
在调用此方法时我在这里犯的错误是什么?
答案 0 :(得分:3)
好吧,你的仿制品都搞砸了。根据第一个参数,VD
和ED
都是Row
。这意味着arg4
应该是Function3<Object, Row, Double, Row>
类型,而不是Function3<Row,Double,Double,Double>
。其他参数同样关闭。在您撰写Double
的许多地方,它应该是Row
(或者所有Row
应该是Double
s)。只需记下每种通用类型应具有的值,并检查您的参数是否与该语句匹配。