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

vc9ivgsu  于 2021-06-24  发布在  Flink
关注(0)|答案(4)|浏览(501)

我正在尝试使用scalaapi在图形上运行connected components算法,如编程指南和其他示例中所示。

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

有人能解释一下为什么会这样吗?

k2fxgqgv

k2fxgqgv1#

vasia和till rohrmann是对的,但在我的例子中,整个问题回到顶点和边的创建,而不仅仅是连接组件算法的使用。我使用scala.long而不是java.lang.long创建顶点和边。

ktca8awb

ktca8awb2#

问题是 ConnectedComponents 实现期望顶点具有 java.lang.Long 顶点值。不幸的是, scala.Long 以及 java.lang.Long 类型不兼容。因此,为了使用该算法 vertices 数据集的类型必须为 DataSet[K, java.lang.Long]K 属于任意密钥类型。

ygya80vv

ygya80vv3#

这个 ConnectedComponents gelly库算法接受两个类型参数,顶点id类型和边值类型,因此您需要像这样调用它 graph.run(new ConnectedComponents[Long, NullValue](maxIterations) . 另外,因为它是一个java实现,所以请确保导入 java.lang.Long . 你也可以看看 org.apache.flink.graph.scala.example.ConnectedComponents 它使用了gsa版本的库算法。

6yoyoihd

6yoyoihd4#

这看起来像是典型的java/scala类型不匹配。请再次检查在这种情况下是使用java.lang.long还是scala.long。

相关问题