import org.apache.spark.graphx._
object Test {
def main(args: Array[String]): Unit = {
val graph = GraphGenerator.generate_graph()
println(graph.numEdges)
println(solve(graph))
}
def solve[A,B](graph: Graph[A,B]) = {
graph.numEdges
}
}
为什么graph.numEdges在main函数中正常工作而且没有解决?
编译器输出:numEdges不是Graph [A,B]的成员。
如果我将graph.numEdges更改为graph.edges.count(),则可以正常工作。
答案 0 :(得分:2)
GraphOps
方法需要ClassTag
来解决类型擦除问题。您可以将您的功能定义为:
import scala.reflect.ClassTag
def solve[A: ClassTag, B: ClassTag](graph: Graph[A, B]) = graph.numEdges
答案 1 :(得分:1)
如果Graph[A,B]
没有val numEdges
,graph
后面的实际班级有val numEdges
,则会发生这种情况。
修改:GraphOps
来自class GraphOps[VD: ClassTag, ED: ClassTag](graph: Graph[VD, ED]) extends Serializable {
/** The number of edges in the graph. */
@transient lazy val numEdges: Long = graph.edges.count()
:
Graph
隐含地abstract class Graph[VD: ClassTag, ED: ClassTag] protected () extends Serializable {
...
implicit def graphToGraphOps[VD: ClassTag, ED: ClassTag]
(g: Graph[VD, ED]): GraphOps[VD, ED] = g.ops
:
scala.reflect.ClassTag
但是只有当VD和ED(在我们的例子中是A,B)是$coefficient=10;
$start=100;
$end=200;
for($i=$start;$i<$end;$i++){
echo $i.'<br>';
}
s - 而你的求解函数不需要时,才会发生隐式转换。