Scala Flink:连接的组件-类型不匹配错误

Scala Flink:连接的组件-类型不匹配错误,scala,apache-flink,gelly,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[Lo

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

有人能解释一下为什么会发生这种情况吗?

这看起来像是典型的java/scala类型不匹配。请再次检查在本例中使用的是java.lang.Long还是scala.Long。

问题在于
ConnectedComponents
实现要求顶点具有
java.lang.Long
顶点值。不幸的是,
scala.Long
java.lang.Long
不兼容类型。因此,为了使用该算法,
顶点
数据集的类型必须是
数据集[K,java.lang.Long]
,其中
K
为任意键类型。

连接组件Gelly库算法采用两种类型参数,顶点ID类型和边值类型,因此,您需要像这样调用它,例如
graph.run(newconnectedcomponents[Long,NullValue](maxIterations)
。此外,由于它是一个Java实现,请确保导入
Java.lang.Long

您还可以查看
org.apache.flink.graph.scala.example.ConnectedComponents
,它使用了GSA版本的库算法。

vasia和Till Rohrmann是正确的,但在我的例子中,整个问题回到顶点和边的创建,而不仅仅是连接组件算法的使用使用scala.Long而不是java.lang.Long的顶点和边