fark?

2015-10-20 14 views
7

rdd.collect(). ToMap yerine RDD'de collectAsMap kullandığımda herhangi bir performans etkisi var mı?fark?

Anahtar değer rdd'im var ve HashMap'e dönüştürmek istediğim kadarıyla topladığım için() sürücüde çalıştığı için büyük veri kümelerinde etkin olmadığım için collectAsMap'i kullanabilir miyim, bunun yerine herhangi bir performans etkisi var mı?

Orijinal:

val QuoteHashMap=QuoteRDD.collect().toMap 
val QuoteRDDData=QuoteHashMap.values.toSeq 
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")",""))) 
QuoteRDDSet.saveAsTextFile(Quotepath) 

Değişimi:

val QuoteHashMap=QuoteRDD.collectAsMap() 
val QuoteRDDData=QuoteHashMap.values.toSeq 
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")",""))) 
QuoteRDDSet.saveAsTextFile(Quotepath) 
+1

Önemli bir performans farkı yoktur. 'collectAsMap' basitçe 'RDD' toplar ve bir sürücüde bir 'HashMap' oluşturur. – zero323

+0

En iyi uygulamayı kullanarak hashmap oluşturmanın bir yolu var mı? collectAsMap kullanmadan veya collect(). toMap? –

+0

Yinelenen anahtarlar beklerseniz, ilk önce kopyaları kaldırarak sürücüye aktarılan veri miktarını azaltabilirsiniz, aksi halde aldığı kadar iyidir. – zero323

cevap

2

collectAsMap uygulanması Böylece aşağıdaki

def collectAsMap(): Map[K, V] = self.withScope { 
    val data = self.collect() 
    val map = new mutable.HashMap[K, V] 
    map.sizeHint(data.length) 
    data.foreach { pair => map.put(pair._1, pair._2) } 
    map 
    } 

olduğunu collect ve collectAsMap arasında performans farkı collectAsMap çünkü orada unde çağırır kaput ayrıca collect.

1

Fark yok. Paralellik kavramını yok ettiği ve verileri sürücüde topladığı için topla() 'yı kullanmaktan kaçının.