Ho cercato una soluzione per un lungo periodo ma non ho ottenuto alcun algoritmo corretto.Come trasformare RDD [(Chiave, Valore)] in Mappa [Tasto, RDD [Valore]]
Utilizzando RDD Spark in scala, come è possibile trasformare uno RDD[(Key, Value)]
in un Map[key, RDD[Value]]
, sapendo che non è possibile utilizzare collect o altri metodi che potrebbero caricare dati in memoria?
In realtà, il mio obiettivo finale è quello di ciclo sul Map[Key, RDD[Value]]
a chiave e chiamare saveAsNewAPIHadoopFile
per ogni RDD[Value]
Per esempio, se ottengo:
RDD[("A", 1), ("A", 2), ("A", 3), ("B", 4), ("B", 5), ("C", 6)]
mi piacerebbe:
Map[("A" -> RDD[1, 2, 3]), ("B" -> RDD[4, 5]), ("C" -> RDD[6])]
Mi chiedo se non costerebbe troppo farlo usando filter
su ogni tasto A, B, C di RDD[(Key, Value)]
, ma non so se chiamare il filtro tante volte ci sono chiavi diverse sarebbe efficiente? (Off Certo che no, ma forse usando cache
?)
Grazie
"sapendo che non è possibile utilizzare collect o altri metodi che potrebbero caricare dati in memoria?". Questo non ha senso. La mappa risultante dovrà comunque essere inserita nella memoria. –
Solo una pugnalata selvaggia nel buio; non raggruppareBy (...) darti qualcosa che puoi usare? Dovrebbe dare il tuo RDD [tasto, Iterable [valori]] – thoredge
@thoredge Non sono sicuro che un iterabile debba essere in memoria per una grande quantità di dati, ma in effetti secondo il mio volume di input questa potrebbe essere una soluzione – Seb