2014-09-03 33 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