У меня RDD[String]
, wordRDD
. У меня также есть функция, которая создает RDD[String] из строки/слова. Я хотел бы создать новый RDD для каждой строки в wordRDD
. Вот мои попытки:
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 многие RDD выдают ошибку переполнения стека, но это не решило мою проблему.
wordRDD.map
, выполняется в кластере. Таким образом, внутреннийcollect
должен инициировать новое задание Spark из работающего задания. Я подозреваю, что он не будет работать распределенно. 11.09.2015myFunction
, которая создаетRDD[String]
из строки/слова. 13.09.2015myFunction
, чтобы вернуть что-то другое. Не зная, насколько сложна функция, трудно сказать, являются ли вычисления, выполняемые в ней, распределенными или нет. Если сбор набора данных означает, что все предыдущие вычисления больше не распределяются, то ничего не будет распространяться. 15.09.2015collect
из другогоRDD
. Как вы представляете, как это должно быть реализовано? Методcollect
запустит выполнение задания и вернет результаты в видеSeq
вашему узлу драйвера. Но операцияflatMap
является частью вашей работы, которая выполняется распределенно. Как тогда должен выполняться методcollect
? Более того,SparkContext
, который необходим для создания новогоRDDs
, просто не сериализуем. Таким образом, невозможно отправить его с вашим UDF. 15.09.2015