在Spark Streaming中执行并行/异步的多个操作

时间:2016-06-16 06:26:18

标签: apache-spark cassandra spark-streaming

有没有办法在Spark流中执行多个异步/并行操作? 这是我的代码:

positions.foreachRDD(rdd -> {

           JavaRDD<A> pbv = rdd.map(p -> A.create(p));          
           javaFunctions(pbv).writerBuilder("poc", "table_a", mapToRow(A.class)).saveToCassandra();     

           JavaRDD<D> pbd = rdd.map(p -> D.create(p));          
           javaFunctions(pbd).writerBuilder("poc", "table_d", mapToRow(D.class)).saveToCassandra();             

           JavaRDD<L> pblv = rdd.map(p -> L.create(p));         
           javaFunctions(pblv).writerBuilder("poc", "table_l", mapToRow(L.class)).saveToCassandra();            

           JavaRDD<V> pbld = rdd.map(p -> V.create(p));         
           javaFunctions(pbld).writerBuilder("poc", "table_v", mapToRow(V.class)).saveToCassandra();

    });

我想并行执行saveToCassandra操作,这可以通过&#34; spark技术&#34;或者只能通过自制的Thread / Executer处理?

感谢您的帮助!

此致 马库斯

1 个答案:

答案 0 :(得分:1)

@ massg的评论可能是这种分叉的最快方法,但如果你不想要,你可以通过分割流来更容易地做到这一点。

这样的东西
positions.map(A.create(p)).saveToCassandra
positions.map(D.create(p)).saveToCassandra
positions.map(L.create(p)).saveToCassandra
positions.map(V.create(p)).saveToCassandra

通过对DSTream执行操作,所有这些请求将并行发生。