/ / Come unire due tavoli - grandi e piccoli - in modo efficace? - hadoop, scintilla di apache

Come unire due tavoli - grandi e piccoli - in modo efficace? - hadoop, apache-spark

Ho 2 set di dati.Uno è grande e un altro set di dati più piccolo. Stavo elaborando i dati nella riduzione della mappa inserendo i piccoli set di dati nella cache distribuita e inserendoli nel mapper ed eseguendo l'unione con alcune altre operazioni.

Voglio che questo passi alla programmazione di Spark Java.Ma sto ricevendo solo una funzione della mappa in cui posso trasformare il mio rdd e per la cache distribuita sto trasmettendo il rdd, ma non riesco a passare la variabile di trasmissione alla funzione della mappa.

 JavaPairRDD<String, String> logData = sc.wholeTextFiles(args[0]);
logData.map(new Transformation());
String [] vals={"val,hel","hi,by"};
JavaRDD<String>javaRDD=sc.parallelize(Arrays.asList(vals));
Broadcast<String> broadcastVar=sc.broadcast(javaRDD.toString());;

e la mia trasformazione della mappa è

public class Transformation implements Function<Tuple2<String, String>, String> {.........}

voglio passare la trasmissione var alla funzione mappa e fare l'unione con altre trasformazioni.

risposte:

2 per risposta № 1

La cosa di cui stai parlando si chiama Map-Side Join. In Spark può essere implementato usando la variabile broadcast, ecco un semplice esempio in PySpark:

cities = {
1 : "Moscow",
2 : "London",
3 : "Paris",
4 : "Berlin",
5 : "New York"
}
bcities = sc.broadcast(cities)

data = [
[1, 1.23],
[2, 2.34],
[3, 3.45],
[4, 4.23],
[5, 24.24],
[1, 32.2],
[2, 22.2],
[4, 222.3]
]
sc.parallelize(data).map(lambda x: [bcities.value[x[0]], x[1]]).collect()

Se il set di dati è più grande, è meglio implementarlo Reduce-Side Join usando Spark join() trasformazione

Per Java vedi l'esempio di Learning Spark - inizia dalla linea 134 dove puoi trovare la linea:

final Broadcast<String[]> signPrefixes = sc.broadcast(loadCallSignTable());

0 per risposta № 2

Aggiunto un costruttore per lo stesso e passato la variabile di trasmissione. trasformazione pubblica (Broadcast> val) { }