Ich bin neu in Scala, lernen es für Apache-Funke. Ich schrieb eine einfache Funktion in scala für GraphX scala type Mismatch Fehler in graphX code
def foo(edge: EdgeTriplet[Map[Long, Double], Double]): Iterator[(VertexId, Map[Long, Double])] = {
val m = edge.srcAttr
for((k, v) <- m){
if (v + edge.attr < edge.dstAttr.getOrElse(k, 10.0))
Iterator(edge.dstId, Map(k -> v + edge.attr))
else
Iterator.empty
}
}
Fehler
Name: Compile Error
Message: <console>:37: error: type mismatch;
found : Double
required: String
Iterator(edge.dstId, Map(k -> v + edge.attr))
^
<console>:35: error: type mismatch;
found : Unit
required: Iterator[(org.apache.spark.graphx.VertexId, Map[Long,Double])]
(which expands to) Iterator[(Long, Map[Long,Double])]
for((k, v) <- m){
^
StackTrace:
Warum scala ist v als String Behandlung? und was ist die Ursache für den zweiten Fehler?
Nach der Bearbeitung des Codes, wie durch @Alexey vorgeschlagen, ich Fehler immer
Name: Compile Error
Message: <console>:30: error: type mismatch;
found : scala.collection.immutable.Map[org.apache.spark.graphx.VertexId,scala.collection.immutable.Map[Long,Double]]
(which expands to) scala.collection.immutable.Map[Long,scala.collection.immutable.Map[Long,Double]]
required: Iterator[(org.apache.spark.graphx.VertexId, Map[Long,Double])]
(which expands to) Iterator[(Long, Map[Long,Double])]
(k, v) <- edge.srcAttr
^
StackTrace:
Wenn es hilft, ich bin der Umsetzung eine andere Version der Sendmessage-Funktion von diesem code
Erster Fehler schreiben würde es vorziehen, sein hat beschlossen, dank Ihrer Lösung. Suche noch nach Lösung – ashwinids
Siehe die bearbeitete Antwort. Ich habe es ursprünglich nicht entdeckt. –
bitte können Sie den vollständigen Code der Lösungen für das zweite Problem schreiben, weil ich Fehlerkonflikt gefunden habe: Iterable [Any], benötigt Iterator [(Long, Map [Long, Double])] – ashwinids