我正在尝试使用Scala API在图形上运行连接组件算法,如编程指南和其他示例所示。
val graph = Graph.fromDataSet(vertices, edges, env).getUndirected
val maxIterations = 10
val components = graph.run(new ConnectedComponents(maxIterations))
我收到以下错误:
Type mismatch, expected: GraphAlgorithm[Long,String,Long,NotInferedT], actual: ConnectedComponents[Nothing,Nothing]
即使我添加
val components = graph.run(new ConnectedComponents[Long,String,Long](maxIterations))
我明白了:
Type mismatch, expected: GraphAlgorithm[Long,String,Long,NotInferedT], actual: ConnectedComponents[Long,String]
我的进口商品是:
import org.apache.flink.api.scala._
import org.apache.flink.graph.library.ConnectedComponents
import org.apache.flink.graph.{Vertex, Edge}
import org.apache.flink.graph.scala.Graph
有人可以解释为什么会这样吗?
答案 0 :(得分:1)
问题是ConnectedComponents
实现要求顶点具有java.lang.Long
顶点值。很遗憾,scala.Long
和java.lang.Long
不兼容。因此,为了使用该算法,您的vertices
数据集必须是DataSet[K, java.lang.Long]
类型,其中K
是任意键类型。
答案 1 :(得分:1)
<%response.sendRedirect("three.jsp?source=two");%>
Gelly库算法采用2种类型参数,即顶点ID类型和边缘值类型,因此您需要像这样调用它,例如ConnectedComponents
。此外,由于它是Java实现,请确保导入graph.run(new ConnectedComponents[Long, NullValue](maxIterations)
。
您还可以查看使用库算法的GSA版本的java.lang.Long
。
答案 2 :(得分:0)
这看起来像典型的java / scala类型不匹配。在这种情况下,请再次检查是否使用java.lang.Long或scala.Long。
答案 3 :(得分:0)