我有一个scala类,其定义如下:
object EigenvectorCentrality extends VertexMeasure[Double]{
override def compute[VD:ClassTag, ED:ClassTag](graph: Graph[VD, ED],vertexMeasureConfiguration: VertexMeasureConfiguration[VD,ED])(implicit num:Numeric[ED]): Graph[Double, ED] = computeEigenvector(graph,vertexMeasureConfiguration)
}
现在我想从Java代码中调用此类的计算函数,但是我不知道如何设置计算函数的最新参数(Numeric [ED])。 我称这个功能如下:
EigenVectorCentrality.compute(mygraph,mygraph.vertices.vdtag,mygraph.vertices.vdtag,Numeric.Int)
但出现此错误:
Could not find Implicit value for parameter num : Numeric[ED]
此类与Spark Graphx有关。你知道如何在Java中设置Scala的隐式变量吗?
答案 0 :(得分:2)
什么是ED
?执行隐式解析时,应传递Scala选择的同一对象。假设ED
为Double
,则应传递DoubleIsFractional
对象,该对象在Java中写为DoubleIsFractional$.MODULE$
。
EigenVectorCentrality.compute(mygraph,mygraph.vertices.vdtag,mygraph.vertices.vdtag,DoubleIsFractional$.MODULE$)
如果ED
是Int
,则应该改为IntIsIntegral$.MODULE$
。
如果ED
是基本类型,则映射Scala / Java基本类型还有其他麻烦。假设ED
为int
(即Scala中的Int
),则Java中的值不能为Numeric<int>
,而只能是Numeric<Integer>
,但是隐式是在Scala中默认未定义。