Utilizzando Scala e Spark, ho il seguente costruzione:Come fa il compilatore Scala a gestire i valori delle variabili inutilizzate?
val rdd1: RDD[String] = ...
val rdd2: RDD[(String, Any)] = ...
val rdd1pairs = rdd1.map(s => (s, s))
val result = rdd2.join(rdd1pairs)
.map { case (_: String, (e: Any, _)) => e }
ai fini della mappatura rdd1
in un PairRDD
è il join con rdd2
nel passaggio successivo. Tuttavia, in realtà mi interessano solo i valori di rdd2
, quindi il passo di mappatura nell'ultima riga che omette le chiavi. In realtà, si tratta di un'intersezione tra rdd2
e rdd1
eseguita con Spark join()
per motivi di efficienza.
La mia domanda si riferisce ai tasti di rdd1pairs
: vengono creati solo per motivi sintattici (per consentire l'unione) nella prima fase della mappa e vengono successivamente eliminati senza alcun utilizzo. Come fa il compilatore a gestirlo? Ha importanza in termini di consumo di memoria se utilizzo la stringa s
(come mostrato nell'esempio)? Devo sostituirlo con null
o 0
per risparmiare un po 'di memoria? Il compilatore effettivamente crea e memorizza questi oggetti (riferimenti) o si accorge che non vengono mai utilizzati?
sembra ragionevole, grazie. Tuttavia, non sono ancora sicuro di come memorizzare i riferimenti all'unità consente di risparmiare una quantità significativa di memoria rispetto alla variante di stringa originale. Lo fa? – Carsten
Ho esteso la mia risposta per coprire quell'argomento – mattinbits
Ma nella domanda originale non vengono create nuove stringhe. Un riferimento a una stringa ha le stesse dimensioni di un riferimento a '()'. –