本文介紹了將可迭代轉(zhuǎn)換為RDD的處理方法,對(duì)大家解決問(wèn)題具有一定的參考價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)吧!
問(wèn)題描述
我想從火花流到幾個(gè)彈性搜索索引。
我創(chuàng)建了成對(duì)的<key(index), value>
,當(dāng)我執(zhí)行g(shù)roupByKey時(shí),結(jié)果是<key(index), Iterable<value>>
的元組,但為了使用ElasticSearch-Spark插件保存到ElasticSearch,我需要JavaRDD<value>
的值。
我知道有一個(gè)可以從List創(chuàng)建Java RDD的SparkConext.parallize(List)選項(xiàng),但該選項(xiàng)只能在驅(qū)動(dòng)程序上執(zhí)行。
是否有其他選項(xiàng)可以創(chuàng)建可以在Executor上執(zhí)行的JavaRDD?或者我可以實(shí)現(xiàn)Tuple2<key(index), JavaRDD<value>>
在Executor上工作的另一種方式?
如果沒(méi)有,我如何才能在驅(qū)動(dòng)程序上僅將Iterator切換到JavaRDD,并在Executor處將插件寫(xiě)入ElasticSearch?
謝謝,
Daniela
推薦答案
我想說(shuō)的是,必須有如下所示的smth
JavaPairRDD<Key, Iterable<Value>> pair = ...;
JavaRDD<Iterable<Value>> values = pair.map(t2 -> t2._2());
JavaRDD<Value> onlyValues = values.flatMap(it -> it);
替代方法是
JavaPairRDD<Key, Iterable<Value>> pair = ...;
JavaRDD<Key, Value> keyValues = pair.flatMapValues(v1 -> v1);
JavaRDD<Value> values = keyValues.map(t2 -> t2._2());
這篇關(guān)于將可迭代轉(zhuǎn)換為RDD的文章就介紹到這了,希望我們推薦的答案對(duì)大家有所幫助,