Flink:Connected Components - 类型不匹配错误

时间:2016-02-04 17:36:03

标签: scala apache-flink gelly

我正在尝试使用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

有人可以解释为什么会这样吗?

4 个答案:

答案 0 :(得分:1)

问题是ConnectedComponents实现要求顶点具有java.lang.Long顶点值。很遗憾,scala.Longjava.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)

和Till Rohrmann是正确的,但在我的情况下,整个问题回溯到顶点和边的创建,而不仅仅是连接组件算法的使用。我使用scala.Long而不是java.lang.Long创建顶​​点和边。