2017-06-28 5 views
0

Ich bin neu in Scala. Ich habe angefangen, meine Fähigkeiten zu entwickeln, indem ich kleine Programme geschrieben habe. Im folgenden Code möchte ich raw_features Format konvertieren, aber ich weiß nicht, wie man transValues in der inneren Schleife erhält und es dem äußeren values zuweist.wie inneren Ring Wert zu erhalten und zu externen Variable

data: dataFrame schema like [id, raw_features] 
names: Map (1-> "fea") 

val dt = data.map(row => { 
     val key = row(0).toString 
     var values = "abc" 
     for((index, name) <- names) { 
      val index_value = row(index.toInt).toString 
      val transValues = transFormat(index_value, name) // convert format fun 
      values.concat(transValues) 
     } 
     (key, values) 
    }) 

Aber der Rückgabewert enthält nur "abc"; Es enthält keine transValues. Bitte lassen Sie mich wissen, wo ich falsch liege.

Vielen Dank im Voraus !!! HAPPY CODING

Antwort

0

Genau wie in Java kann concat() verwirren (!). concat() aktualisiert den String, an dem die Methode aufgerufen wird, nicht, da Strings sowohl in Scala als auch in Java unveränderlich sind. Es wird eine Zeichenfolge zurückgegeben, mit der Sie dieselbe Variable (siehe Antwort von jvwilge) oder eine andere Variable festlegen können. Ich denke, Sie bekommen, was Sie wollen, wenn Sie eine andere Variable zurückgeben, zum Beispiel:

... 
var result = values.concat(transValues) 
} 
(key, result) 
...` 

Alternativ Sie values.concat(transValues) direkt in Ihrem Tupel nennen könnte. Oder drittens, wie Ramesh vorschlägt, können Sie + = "astring" für die ursprüngliche Variable aufrufen.

+0

Und auch funktionieren soll, in meinem Ersatzcode, würde ich eine val macht zur Folge hat. Sie versuchen nicht mehr, die Variablenwerte zu aktualisieren. –

+0

Richtig, wie jvwilge sagt, können Sie einfach die gleiche Variable setzen. –

0

values = values.concat(transValues) behebt Ihren Code (anstelle von values.concat(transValues)). Es funktioniert jetzt aus dem Grund, den Ben erwähnt.

0

Gerade die Zeile

values.concat(transValues) 

zu

values += transValues.toString 

Es

Verwandte Themen