【发布时间】:2015-09-11 15:39:39
【问题描述】:
我有一个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,但它没有解决我的问题。
【问题讨论】:
标签: scala apache-spark