2017-01-13 53 views
1

您好我想在scala的地圖方法中使用「for」。for循環進入使用斯卡拉Spark的地圖方法

我該怎麼辦呢?

例如這裏的每一行讀我要生成一個隨機單詞:

val rdd = file.map(line => (line,{ 
      val chars = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
      val word = new String; 
      val res = new String; 
      val rnd = new Random; 
      val len = 4 + rnd.nextInt((6-4)+1); 

      for(i <- 1 to len){ 
       val char = chars(rnd.nextInt(51)); 
       word.concat(char.toString); 
      } 

      word; 
})) 

我的電流輸出爲:

Array[(String, String)] = Array((1,""), (2,""), (3,""), (4,""), (5,""), (6,""), (7,""), (8,""), (9,""), (10,""), (11,""), (12,""), (13,""), (14,""), (15,""), (16,""), (17,""), (18,""), (19,""), (20,""), (21,""), (22,""), (23,""), (24,""), (25,""), (26,""), (27,""), (28,""), (29,""), (30,""), (31,""), (32,""), (33,""), (34,""), (35,""), (36,""), (37,""), (38,""), (39,""), (40,""), (41,""), (42,""), (43,""), (44,""), (45,""), (46,""), (47,""), (48,""), (49,""), (50,""), (51,""), (52,""), (53,""), (54,""), (55,""), (56,""), (57,""), (58,""), (59,""), (60,""), (61,""), (62,""), (63,""), (64,""), (65,""), (66,""), (67,""), (68,""), (69,""), (70,""), (71,""), (72,""), (73,""), (74,""), (75,""), (76,""), (77,""), (78,""), (79,""), (80,""), (81,""), (82,""), (83,""), (84,""), (85,""), (86... 

我不知道爲什麼右側是空的。

回答

1

word.concat不修改word但返回一個新的字符串,可以使word一個變量,新的字符串添加到它:

var word = new String 
.... 
for { 
    ... 
    word += char 
    ... 
} 
+0

當我嘗試它,我收到此錯誤錯誤:價值+ =不是字符串 字中的一員+ = char.toString – user7375007

+0

需要聲明'word'作爲一個變量。注意'word'前面的'var'關鍵字,而不是'val',它是不可變的。 – Psidom

+0

是的,你是正確的thx很多! – user7375007

2

沒有必要爲var這裏。這是一個內襯

Seq.fill(len)(chars(rnd.nextInt(51))).mkString 

這將通過反覆調用chars(rnd.nextInt(51))創建長度len的字符序列,則使得它成爲一個字符串。

因此,你會得到這樣的事情:

import org.apache.spark.rdd.RDD 
import scala.util.Random 

val chars = ('a' to 'z') ++ ('A' to 'Z') 

val rdd = file.map(line => { 
    val randomWord = { 
    val rnd = new Random 
    val len = 4 + rnd.nextInt((6 - 4) + 1) 
    Seq.fill(len)(chars(rnd.nextInt(chars.length-1))).mkString 
    } 
    (line, randomWord) 
}) 
+0

如果你不介意的話,我冒昧地更新了你的答案。 :) – eliasah

+1

如果你喜歡。我認爲這已經很清楚了:)我調整了它 –