0
我會嘗試以一般方式提出問題。對我的RDD的所有元素執行功能
我有這樣
myFunction (Object first, Object second)
的功能,我有對象RDD [Object]
的RDD。
我需要在所有RDD的元素執行myFunction的,在過程結束時,我必須確保我的對象的所有的夫妻都與myfunction的(..,..)
一種方式進行,也許,是創建一個廣播變量(如我RDD的副本),而且比
val broadcastVar = sc.broadcast(rdd.collect())
rdd_line.mapPartitions(p=> {
var brd = broadcastVar.value
var result = new ListBuffer[Double]()
brd.foreach(b => {
p.foreach(e => result+= myfunction(b ,e))
})
result.toList.toIterator
})
還有另一種方法具有更好的性能做到這一點?
調用收集整個大數據對象以便再次修改/廣播它通常是一種反模式。而是使用Spark映射,減少,過濾或類似的東西來轉換大數據對象。 – Paul