我是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
。请告诉我哪里出错了。
非常感谢你!快乐编码
答案 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提到的原因。