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() } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |