加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何从RDD创建RDD集合?

发布时间:2020-12-16 18:56:25 所属栏目:安全 来源:网络整理
导读:我有一个RDD [String],wordRDD.我还有一个从字符串/单词创建RDD [String]的函数.我想为wordRDD中的每个字符串创建一个新的RDD.以下是我的尝试: 1)失败,因为Spark不支持嵌套的RDD: var newRDD = wordRDD.map( word = { // execute myFunction() (new MyClas
我有一个RDD [String],wordRDD.我还有一个从字符串/单词创建RDD [String]的函数.我想为wordRDD中的每个字符串创建一个新的RDD.以下是我的尝试:

1)失败,因为Spark不支持嵌套的RDD:

var newRDD = wordRDD.map( word => {
  // execute myFunction()
  (new MyClass(word)).myFunction()
})

2)失败(可能是由于范围问题?):

var newRDD = sc.parallelize(new Array[String](0))
val wordArray = wordRDD.collect
for (w <- wordArray){
  newRDD = sc.union(newRDD,(new MyClass(w)).myFunction())
}

我理想的结果如下:

// input RDD (wordRDD)
wordRDD: org.apache.spark.rdd.RDD[String] = ('apple','banana','orange'...)

// myFunction behavior
new MyClass('apple').myFunction(): RDD[String] = ('pple','aple'...'appl')

// after executing myFunction() on each word in wordRDD:
newRDD: RDD[String] = ('pple','aple',...,'anana','bnana','baana',...)

我在这里找到了一个相关的问题:Spark when union a lot of RDD throws stack overflow error,但它没有解决我的问题.

解决方法

使用flatMap可以根据需要获取RDD [String].

var allWords = wordRDD.flatMap { word => 
  (new MyClass(word)).myFunction().collect()
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读