类型不匹配 flink 图社区

Posted

技术标签:

【中文标题】类型不匹配 flink 图社区【英文标题】:type mismatch flink graph community 【发布时间】:2016-08-26 22:50:47 【问题描述】:

我正在尝试执行一个非常简单的社区检测代码,但它返回错误:

import org.apache.flink.graph.library.CommunityDetection
import org.apache.flink.graph._
import org.apache.flink.graph.scala.Graph
import java.lang.Long
import java.lang.Double
import org.apache.flink.api.scala._

val env = ExecutionEnvironment.getExecutionEnvironment
val vertices = Seq(new Vertex[Long, String](1L, "foo"), new Vertex[Long, String](2L, "bar"))
val edges = Seq(new Edge[Long, String](1L, 2L, "foobar"))

val graph = Graph.fromCollection(vertices, edges, env)
val updatedGraph = graph.mapVertices(v => v.getValue + 1)
val resultGraph = graph.run(new CommunityDetection[Long](30, 0.5))


                            ^

【问题讨论】:

错误:(30, 33) 类型不匹配;找到:org.apache.flink.graph.library.CommunityDetection[Long] 需要:org.apache.flink.graph.GraphAlgorithm[Long,String,String,?] val resultGraph = graph.run(new CommunityDetection[Long](30 , 0.5)) 【参考方案1】:

CommunityDetection 算法需要 GraphLong Id 和顶点值以及 Double 边权重。在您的代码中,您为顶点和边定义 String 值。 请查看at the Gelly documentation 了解更详细的使用信息。

【讨论】:

我正在使用以下代码,但仍然出现异常。你能举一个工作代码的例子吗?谢谢你。 val env = ExecutionEnvironment.getExecutionEnvironment val vertices = Seq(new Vertex[Long, Double](1L, 0.1), new Vertex[Long, Double](2L, 0.4)) val edges = Seq(new Edge[Long, Double]( 1L, 2L, 0.5)) val graph = Graph.fromCollection(vertices, edges, env) 问题是您使用的是Double 顶点值。顶点 ID 和值都必须是 Long。尝试用例如替换您的顶点创建val vertices = Seq(new Vertex[Long, Long](1L, 1L), new Vertex[Long, Long](2L, 4L)).

以上是关于类型不匹配 flink 图社区的主要内容,如果未能解决你的问题,请参考以下文章

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

Flink Gelly - 创建图形时类型不匹配

Flink的类型与序列化

SparkSQL 聚合器:类型不匹配错误

flink 问题记录

flink sql 知其所以然| sql api 类型系统