簡體   English   中英

在制作商品地圖時如何減少Spark的改組和時間?

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM