2017-01-25 3 views
3
„durch die Schaffung eines 2-Tupel Anpassung Argumentliste“

Der folgende Code hat prüft bereits als Arbeits wie ich es will: dh das Hinzufügen eines Tupels zu einer bestehenden Sequenz (auch von TupelnWie Code restrukturieren Warnung zu vermeiden:

)
iter.map { r =>  // Iterator of org.apache.spark.sql.Row 
    r.toSeq :+ (outColName,locMap(r.getAs[String](inColName))) 
} 

jedoch unser Build-System hat fail on warning aktiviert und somit Fehler aus dem obigen Code mit:

[info] 'compiler-interface' not yet compiled for Scala 2.10.6. Compiling... 
[info] Compilation completed in 24.504 s 
[error] /home/../Sampling.scala:40: Adapting argument list 
     by creating a 2-tuple: this may not be what you want. 
[error]   signature: SeqLike.:+[B >: A, That](elem: B)(implicit bf: scala.collection.generic.CanBuildFrom[Repr,B,That]): That 
[error] given arguments: outColName, locMap(r.getAs[String](inColName)) 
[error] after adaptation: SeqLike.:+((outColName, locMap(r.getAs[String](inColName))): (String, Int)) 
[error]   r.toSeq :+ (outColName,locMap(r.getAs[String](inColName))) 
[error]     ^
[error] one error found 

jetzt - wie erwähnt - die sind was ich will. Aber Travis muss glücklich gemacht werden. Also, was ist der richtige Aufruf, um denselben zu signifyieren -i.e. Das ist das gewünschte Verhalten - und vermeiden Sie die Warnungen hier?

+0

was ist der Typ von r? – marios

+0

@marios aktualisiert op – javadba

Antwort

1

Versuchen Sie, dem Compiler zu helfen, indem Sie den Methodenaufruf und die Klammer explizit hinzufügen.

iter.map { r: Row => 
    r.toSeq.:+((outColName,locMap(r.getAs[String](inColName))):Any) 
} 
+0

Guckte nur vorsichtiger auf Ihren Vorschlag: es ist nicht korrekt. r ist eine Zeile. Der andere Vorschlag, explizit auf ".: +" Zu verweisen, hat keine Wirkung. Gleiche Fehler. – javadba

+0

Also hat das nicht den Trick gemacht? Ich habe das def von r in Row geändert. Aus der Fehlermeldung sah es für mich wie eine Compiler-Warnung aus, wenn man nicht sicher ist, ob man anruft: + mit zwei Argumenten (a, b) oder mit einem Argument vom Typ tuple (a, b). – marios

+0

Nein, das ist überhaupt nicht das Problem. Das 2-fach ist korrekt und der Originalcode funktioniert. das Problem ist unser 'Travis' erfordert keine * Warnungen *. – javadba

Verwandte Themen