[英]How to reduce shuffling and time taken by Spark while making a map of items?
我正在使用spark讀取這樣的csv文件:
x, y, z
x, y
x
x, y, c, f
x, z
我想制作一張物品及其數量的地圖。 這是我寫的代碼:
private def genItemMap[Item: ClassTag](data: RDD[Array[Item]], partitioner: HashPartitioner): mutable.Map[Item, Long] = {
val immutableFreqItemsMap = data.flatMap(t => t)
.map(v => (v, 1L))
.reduceByKey(partitioner, _ + _)
.collectAsMap()
val freqItemsMap = mutable.Map(immutableFreqItemsMap.toSeq: _*)
freqItemsMap
}
當我運行它時,這會花費很多時間並會浪費空間。 有沒有辦法減少時間?
我有一個2節點集群,每個集群有2個核心和8個分區。 csv文件中的行數為170000。
如果您只是想做一件獨特的物品計數工作,那么我想您可以采用以下方法。
val data: RDD[Array[Item]] = ???
val itemFrequency = data
.flatMap(arr =>
arr.map(item => (item, 1))
)
.reduceByKey(_ + _)
減少時不要提供任何分區,否則會導致重新組合。 只需保留已有的分區即可。
另外...不要將分布式數據collect
到本地內存對象中,例如Map
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.