Definición


Es una transformación que nos permite combinar un RDD y una variable broadcasteada en base a las claves de los registros. Junta cada registro del primer RDD con cada valor del segundo variable broadcasteada que tengan la misma clave. Este no agrupa, sino que es de a pares de registro.

Ejemplo


Inicializamos

import pyspark as ps
 
spark = ps.sql.SparkSession.builder.getOrCreate()
sc = spark.sparkContext
 
productos = sc.parallelize([1, 1, 2, 1, 3, 6, 3, 6, 3, 5, 7], 3)
nombreProductos = {
	1: "papas",
	2: "cebollas",
	3: "tomates",
	4: "zanahorias",
	5: "batatas",
	6: "peras",
	7: "cilantro"
}
b_nombreProductos = sc.broadcast(nombreProductos)

Buscamos los productos que se vendieron más de 4 veces

productosPopulares = productos
						.map(lambda x: (x, 1))
						.reduceByKey(lambda x, y: x + y)
						.filter(lambda x: x[1] >= 4)

Donde usamos map, reduceByKey y filter.

Ahora hacemos nuestro join

productosPopulares = productosPopulares.map(
	lambda x: (b_nombreProductos.value[x[0]], x[1])
)
productosPopulares.collect()

Donde usamos collect para ver los resultados