首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Scala用星火循环映射方法

用Scala用星火循环映射方法
EN

Stack Overflow用户
提问于 2017-01-13 03:39:49
回答 2查看 4K关注 0票数 1

嗨,我想在scala中使用"for“到map方法。

我该怎么做呢?

例如,在这里,对于每一行读,我想生成一个随机单词:

代码语言:javascript
复制
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;
}))

我目前的产出是:

代码语言:javascript
复制
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...

我不知道为什么右边是空的。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-01-13 03:49:06

word.concat不修改word,而是返回一个新字符串,您可以使word成为一个变量并向其添加新字符串:

代码语言:javascript
复制
var word = new String
....
for {
    ...
    word += char
    ...
}
票数 1
EN

Stack Overflow用户

发布于 2017-01-13 09:27:01

这里不需要var。是一条内衬

代码语言:javascript
复制
  Seq.fill(len)(chars(rnd.nextInt(51))).mkString

这将通过反复调用len来创建长度为chars(rnd.nextInt(51))的序列,然后将其转化为字符串。

因此,您将得到如下内容:

代码语言:javascript
复制
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)
})
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/41627030

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档