Flink:连接组件 - 类型不匹配错误
Flink: Connected Components - type mismatch error
我正在尝试 运行 使用 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
类型不兼容。因此,为了使用该算法,您的 vertices
数据集必须是 DataSet[K, java.lang.Long]
类型,其中 K
是任意键类型。
ConnectedComponents
Gelly库算法有2个类型的参数,顶点ID类型和边值类型,所以你需要这样调用,例如graph.run(new ConnectedComponents[Long, NullValue](maxIterations)
。此外,由于它是 Java 实现,请确保导入 java.lang.Long
。
也可以看看org.apache.flink.graph.scala.example.ConnectedComponents
里面用的是GSA版本的库算法
vasia 和 Till Rohrmann 是对的,但在我的例子中,整个问题回溯到顶点和边的创建,而不仅仅是连通分量算法的使用。我使用 scala.Long 而不是 java.lang.Long.
创建顶点和边
我正在尝试 运行 使用 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
类型不兼容。因此,为了使用该算法,您的 vertices
数据集必须是 DataSet[K, java.lang.Long]
类型,其中 K
是任意键类型。
ConnectedComponents
Gelly库算法有2个类型的参数,顶点ID类型和边值类型,所以你需要这样调用,例如graph.run(new ConnectedComponents[Long, NullValue](maxIterations)
。此外,由于它是 Java 实现,请确保导入 java.lang.Long
。
也可以看看org.apache.flink.graph.scala.example.ConnectedComponents
里面用的是GSA版本的库算法
vasia 和 Till Rohrmann 是对的,但在我的例子中,整个问题回溯到顶点和边的创建,而不仅仅是连通分量算法的使用。我使用 scala.Long 而不是 java.lang.Long.
创建顶点和边