我想从火花流式传输到几个弹性搜索索引。
我创建<key(index), value>
对,当我执行groupByKey时,结果是<key(index), Iterable<value>>
的元组但是为了使用elasticsearch-spark插件保存到elasticsearch,我需要将值JavaRDD<value>
。
我知道有一个sparkContext.parallelize(list)选项可以从列表中创建JavaRDD,但这只能在驱动程序上执行。
是否有另一个选项来创建可以在执行程序上执行的JavaRDD?或者我可以实现Tuple2<key(index), JavaRDD<value>>
在执行者身上工作的另一种方式?
如果不是,我怎么才能在驱动程序上只将Iterator切换到JavaRDD并且在执行程序中写入elasticsearch?
谢谢,
丹妮拉
答案 0 :(得分:1)
我说必须像以下一样有可能吗?
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());