Apache Spark 2 : Flat map con Java


A diferencia de Map, FlatMap nos permitirá generar una lista de elementos de uno solo, en Map teníamos un elemento de entrada y teníamos uno de salida, con FlatMap tendremos un elemento de entrada y a partir de este generaremos un conjunto de elementos de salida.

En el post Apache Spark 2 : Conceptos básicos utilizamos Flat map para realizar un conteo de palabras, en este post haremos una variación del programa word count, veamos el siguiente código:


import java.util.Arrays;
import java.util.List;

import org.apache.spark.SparkConf;
import org.apache.spark.api.java.JavaRDD;
import org.apache.spark.api.java.JavaSparkContext;

/**
 * @author maagapi
 *
 */
public class FlatMapExample {
	public static void main(String[] args) {
		JavaSparkContext sc = new JavaSparkContext(new SparkConf().setAppName("FlatMapExample").setMaster("local[3]"));
		List phrases = Arrays.asList("This is the first set of words",
							"This is the second set of words",
							"This is the third set of words",
							"This is the fourth set of words",
							"This is the last set of words");
		JavaRDD phrasesRdd = sc.parallelize(phrases);
		System.out.printf("The program has %d phrases \n",phrasesRdd.count());

		JavaRDD words = phrasesRdd.flatMap(f->Arrays.asList(f.split(" ")).iterator());
		System.out.printf("The program has %d words \n",words.count());

		sc.close();

	}
}

Analicemos el código anterior:

  • Primero creamos nuestro contexto de Spark
  • Tomamos como entrada un conjunto de frases
  • Transformamos la lista de frases en un RDD
  • Imprimimos el número de frases en nuestro RDD, en este caso imprimirá 5
  • Después haciendo uso de flatMap partiremos nuestro RDD de frases y lo transformaremos en un RDD de palabras
  • Una vez que tenemos nuestro RDD de palabras imprimimos el conteo, en este caso imprimirá 35
  • Terminamos nuestro contexto de Spark

Como vemos, la operación Flat map nos permitió tomar una frase de entrada y generar muchas palabras de salida, esto es diferente a map ya que map solo permite tener por cada valor de entrada, uno de salida.

Puedes encontrar el código completo en el siguiente enlace https://github.com/raidentrance/spark-tutorial.

En próximos posts veremos ejemplos cada vez más complejos, síguenos en nuestras redes sociales para enterarte sobre nuevo contenido https://www.facebook.com/devs4j/ y https://twitter.com/devs4j.

Autor: Alejandro Agapito Bautista

Twitter: @raidentrance

Contacto:raidentrance@gmail.com

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión /  Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión /  Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión /  Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión /  Cambiar )

Conectando a %s