Flink: ошибка несоответствия типов PageRank

Я хочу вычислить PageRank из файла CSV ребер, отформатированных следующим образом:

12,13,1.0
12,14,1.0
12,15,1.0
12,16,1.0
12,17,1.0
...

Мой код:

var filename = "<filename>.csv"

val graph = Graph.fromCsvReader[Long,Double,Double]( 
                   env = env, 
                   pathEdges = filename, 
                   readVertices = false, 
                   hasEdgeValues = true, 
                   vertexValueInitializer = new MapFunction[Long, Double] { 
                           def map(id: Long): Double = 0.0 } )

val ranks = new PageRank[Long](0.85, 20).run(graph)

Я получаю следующую ошибку из оболочки Flink Scala:

error: type mismatch;
 found   : org.apache.flink.graph.scala.Graph[Long,_23,_24] where type _24 >: Double with _22, type _23 >: Double with _21
 required: org.apache.flink.graph.Graph[Long,Double,Double]
            val ranks = new PageRank[Long](0.85, 20).run(graph)
                                                         ^

Что я делаю неправильно?

(И правильны ли начальные значения 0.0 для каждой вершины и 1.0 для каждого ребра?)

1 ответ

Решение

Проблема в том, что вы даете Scala org.apache.flink.graph.scala.Graph в PageRank.run который ожидает Java org.apache.flink.graph.Graph,

Для того, чтобы запустить GraphAlgorithm для скалы Graph объект, вы должны позвонить run метод Скала Graph с GraphAlgorithm,

graph.run(new PageRank[Long](0.85, 20))

Обновить

В случае с PageRank В алгоритме важно отметить, что алгоритм ожидает экземпляр типа Graph[K, java.lang.Double, java.lang.Double], С Java Double тип отличается от скалы Double тип (с точки зрения проверки типа), это должно быть учтено.

Для примера кода это означает

val graph = Graph.fromCsvReader[Long,java.lang.Double,java.lang.Double]( 
  env = env, 
  pathEdges = filename, 
  readVertices = false, 
  hasEdgeValues = true, 
  vertexValueInitializer = new MapFunction[Long, java.lang.Double] { 
         def map(id: Long): java.lang.Double = 0.0 } )
  .asInstanceOf[Graph[Long, java.lang.Double, java.lang.Double]]
Другие вопросы по тегам