2017-06-28 26 views
0

我是新来的斯卡拉。我已经开始通过编写小程序来培养自己的技能。在下面的代码中,我想转换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) 
    }) 

但返回值只包含​​;它不包含transValues。请让我知道我要出错的地方。

非常感谢你提前! HAPPY CODING

回答

0

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

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

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

+0

而且也是,在我替换代码,我会做一个导致VAL。您不再试图更新变量值。 –

+0

正如jvwilge所说,你可以设置相同的变量。 –

0

values = values.concat(transValues)修复代码(代替values.concat(transValues))。由于Ben提到的原因,它现在可以工作。

0

只需更改行

values.concat(transValues) 

values += transValues.toString 

它应该工作

相关问题