我是Spark,Scala的新手,我有几个问题 -
master
设置为local[2]
时,是否意味着每当我执行rdd.map( ... ).collect()
之类的操作时,map
函数将在2个内核上执行? 如果我重用值,内存是如何共享的?
即
val conf = new SparkConf().setMaster("local["+cores+"]")
val sc = new SparkContext(conf)
// in practice the following will be sparse matrix which I want shared between threads
val myHugeValue = 100
// in practice the following would interact with myHugeValue
sc.parallelize(Array.range(0, cores)).map(myHugeValue + _).collect()
在上文中,myHugeValue
会在使用myHugeValue
时将其复制到每个映射器函数吗?如果是这样,我如何更改impl以使其不被复制?
编辑1:
更具体的2., 假设我的集群中有10个节点或工作核心,那么如果我的数据被分成10个部分以便每个节点可以处理其批处理,那么处理是否最有效?是否有理由将数据拆分为较小的块并增加网络开销?
我不想复制值myHugeValue
的原因是因为它是一个巨大的对象,需要时间复制每个地图操作。地图操作被调用了很多次迭代。我宁愿每个群集缓存一次对象,然后重复调用map函数。有这样做的Spark方法吗?