2017-06-28 24 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 

它應該工作

相關問題