[英]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
有人可以解釋為什么會這樣嗎?
問題在於ConnectedComponents
實現期望頂點具有java.lang.Long
頂點值。 不幸的是, scala.Long
和java.lang.Long
不兼容類型。 因此,為了使用該算法,您的vertices
數據集必須為DataSet[K, java.lang.Long]
類型DataSet[K, java.lang.Long]
其中K
為任意鍵類型。
ConnectedComponents
Gelly庫算法采用2個類型參數,即頂點ID類型和邊值類型,因此您需要像graph.run(new ConnectedComponents[Long, NullValue](maxIterations)
這樣調用它。一個Java實現,請確保導入java.lang.Long
您還可以查看使用庫算法的GSA版本的org.apache.flink.graph.scala.example.ConnectedComponents
。
這看起來像是典型的java / scala類型不匹配。 在這種情況下,請再次檢查是否使用java.lang.Long或scala.Long。
vasia和Till Rohrmann是正確的,但就我而言,整個問題都回溯到頂點和邊的創建,而不僅僅是連接組件算法的使用。 我正在使用scala.Long而不是java.lang.Long創建頂點和邊。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.