簡體   English   中英

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

有人可以解釋為什么會這樣嗎?

問題在於ConnectedComponents實現期望頂點具有java.lang.Long頂點值。 不幸的是, scala.Longjava.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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM