C'è qualche impatto sulle prestazioni quando uso collectAsMap sul mio RDD invece di rdd.collect(). InMap?differenza tra rdd.collect(). ToMap in rdd.collectAsMap()?
Ho un valore chiave rdd e voglio convertire in HashMap per quanto so che collect() non è efficiente su insiemi di dati di grandi dimensioni in quanto viene eseguito su driver posso utilizzare collectAsMap invece c'è qualche impatto sulle prestazioni?
originale:
val QuoteHashMap=QuoteRDD.collect().toMap
val QuoteRDDData=QuoteHashMap.values.toSeq
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")","")))
QuoteRDDSet.saveAsTextFile(Quotepath)
Cambio:
val QuoteHashMap=QuoteRDD.collectAsMap()
val QuoteRDDData=QuoteHashMap.values.toSeq
val QuoteRDDSet=sc.parallelize(QuoteRDDData.map(x => x.toString.replace("(","").replace(")","")))
QuoteRDDSet.saveAsTextFile(Quotepath)
Nessuna differenza di prestazioni significativa. 'collectAsMap' semplicemente raccoglie' RDD' e crea un 'HashMap' mutabile su un driver. – zero323
esiste un modo per creare hashmap utilizzando le best practice? senza usare collectAsMap o collect(). toMap? –
Se si prevedono chiavi duplicate, è possibile ridurre la quantità di dati trasferiti al driver rimuovendo prima i duplicati, altrimenti è altrettanto buono. – zero323