如何获取内部循环值并分配给外部变量

时间:2017-06-28 09:34:39

标签: scala

我是Scala的新手。我已经开始通过编写小程序来培养我的技能。在下面的代码中,我想转换raw_features格式,但我不知道如何在内循环中获取transValues并将其分配给外部values

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)  
     }) 

但返回值仅包含"abc";它不包含transValues。请告诉我哪里出错了。

非常感谢你!快乐编码

2 个答案:

答案 0 :(得分:0)

就像在Java中一样,concat()会混淆(!)。 concat()不会更新调用该方法的字符串,因为Scala和Java中的字符串都是不可变的。它将返回一个字符串,您可以使用该字符串设置相同的变量(请参阅jvwilge的答案)或其他变量。如果你返回另一个变量,我想你会得到你想要的东西,例如:

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

或者,您可以在元组中调用values.concat(transValues)。或者,第三,正如Ramesh建议的那样,你可以在原始变量上调用+ =“astring”。

答案 1 :(得分:0)

values = values.concat(transValues)修复了您的代码(代替values.concat(transValues))。它现在起作用是因为Ben提到的原因。