2014-09-03 64 views
0

有没有办法在运行某个部分期间减少内核/执行程序的数量?我们不想超出最终数据存储区,但需要更多的内核来有效地执行计算工作。Apache Spark:在执行期间减少内核数量

基本上

// want n cores here 
val eventJsonRdd: RDD[(String,(Event, Option[Article]))] = eventGeoRdd.leftOuterJoin(articlesRdd) 

val toSave = eventJsonRdd.map(processEventsAndArticlesJson) 

// want two cores here 
toSave.saveToEs("apollobit/events") 

回答

2

你可以试试:

toSave.repartition(2).saveTo... 

虽然这会带来潜在的昂贵的洗牌。

如果您的商店支持批量更新,您可以拨打foreachPartition并使用大量数据而不是一次执行某项操作,从而获得更好的性能。

+0

会测试出来。谢谢! – chrislovecnm 2014-09-03 20:45:18

+0

foreachPartition的语法是什么? – chrislovecnm 2014-09-03 20:49:35

+0

http://spark.apache.org/docs/latest/api/scala/index.html#org.apache.spark.rdd.RDD 类似... .foreachPartition {iterator => saveThemAll(iterator)} – 2014-09-03 20:54:56