Relativi a Spark - Joining 2 PairRDD elementsIn spark join, l'ordine del tavolo è come nel maiale?
Quando si effettua un regolare join nel maiale, l'ultima tabella nel join non viene portato in memoria, ma in streaming attraverso, invece, quindi se A ha piccola cardinalità per tasto e B grande cardinalità, è significativamente migliore per fare join A, B
di join A by B
, dal punto di vista delle prestazioni (evitando fuoriuscita e OOM)
Esiste un concetto simile nella scintilla? Non ho visto nessuna raccomandazione del genere e mi chiedo come sia possibile? L'implementazione mi sembra più o meno la stessa del maiale: https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/CoGroupedRDD.scala
O mi manca qualcosa?
ok, ma supponiamo di non memorizzare nella cache alcun RDD. Presumo che questa scintilla faccia una sorta di loop nidificati tra i 2 RDD. Se A ha record 1M per chiave join, e B ha solo 3 record per chiave join, ma entrambi sono enormi. Se la tabella esterna (a sinistra) è A, ogni tasto di join causerà la fuoriuscita del disco ... giusto? – ihadanny
@ihadanny se si guarda la [fonte] (https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/rdd/PairRDDFunctions.scala#L503) tutto è un iteratore, quindi nulla è necessariamente caricato in memoria, quando un iteratore è esaurito, sarebbe solo dall'inizio, che detto così sembra che il ciclo for lascerebbe l'output in memoria – aaronman