Spark

Melt y cast en Spark con scala

Trabajar con Spark usando Scala implica renunciar a ese paraíso que son las funciones melt y (d)cast de reshape2. ¿O no? import org.apache.spark.sql.types.StructField; import org.apache.spark.sql.types.StructType; import org.apache.spark.sql.types.StringType; import org.apache.spark.sql.types.DoubleType; import org.apache.spark.sql.Row; /** Create some data **/ val nrows = 20 val origDF = sc.parallelize(1.to(nrows).map(x => (x, math.pow(x,2), math.pow(x,3)))).toDF("id", "cuadrado", "cubo") /** Melt **/ val ids = Map("id" -> 0) val cols = Map("cuadrado" -> 1, "cubo" -> 2) def melt(x:Row, ids:Map[String, Int] , cols:Map[String, Int]) = { var tmp = ids.

Curso de ASPgems: Descubre Spark en 8 semanas

En el Meetup de hoy me he enterado de que mis colegas de ASPgems están organizando un curso de Spark. Y no por colegas sino por competentes, lo divulgo por aquí. La información al respecto, aquí. Advertencia: El curso no es gratuito y ASPgems me ha invitado a dos cervezas a la salida del Meetup de hoy. Pero, tranquilos, mi precio no es ese.

SparkR 1.4: carga de ficheros CSV

R
He instalado Spark 1.4 recientemente y he comenzado a cacharrear. Antes de nada, quiero cargar datos. Advierto que ha cambiado sustancialmente la API de SparkR. Entre otras novedades, desapareció (o más bien, se escondió) la función textFile, que permitía leer ficheros línea a línea. Ahora está pero no se exporta. La verás solo si haces SparkR:::textFile. ¿Signo de deprecación? Se pueden crear un DataFrame (tablas distribuidas de Spark) a partir de un data.

Liberado Spark 1.4

R
El anuncio de la liberación de la versión 1.4 de Spark se ha materializado. Está aquí. ¿Qué trae de novedad la versión 1.4? La integración con SparkR —antes había que instalarlo con algo de dolor independientemente— y, aparentemente, data.frames distribuidos y, cuentan, una sintaxis similar a la de dplyr —honestamente, hubiera preferido otra— para manipularlos. Iré desgranando por aquí novedades. Y estoy pensando organizar una install & tutorial party un día de estos en Madrid.

Spark gana la competición Gray Sort de 2014

Esta de hoy es una entrada muy friqui que se sirve de la casi excusa de que los creadores de Apache Spark han ganado la competición Gray Sort de 2014 para recomendar a sus lectores a estar alerta a las novedades que llegan. Todavía colea el siglo XX y todavía pagan dinero por cosas que algún día consideraremos tan entrañables como el ZX Spectrum de 48kB tales como: Colorear casillas en Excel.

Componentes conexas (de grafos) en Spark

Uno de mis últimos pet projects tiene que ver con el análisis de las componentes conexas de unos grafos muy grandes. Como aquí pero con datos de un tamaño muchos órdenes de magnitud mayores. Usando Spark, claro. Y ya que lo cito, aprovecho la ocasión para regalar un consejo a mis lectores más jóvenes: no esperéis a los cuarenta para aprender Scala y Spark. Voy a limitarme a copiar el código para referencia mía y de otros.

En serio con Spark: instalación

Me he puesto en modo estoy serio con Spark. Lo instalé en mi ya manida máquina virtual (voy a subir una nueva versión de ella pronto), pero hoy la voy a instalar en mi portátil. Y con la idea de, en los próximos días, montar un clúster en condiciones. Los pasos son los siguientes: Ir a la página de descargas y seleccionar una versión ya precompilada. Hay varias porque Spark se enlaza con librerías relacionadas con Hadoop (aunque uno puede utilizar Spark perfectamente sin él) y hay varias versiones mutuamente incompatibles de Hadoop.

Estrategias escalables (con R)

Hay quienes preguntan cómo cargar con R un csv de 8GB en un portátil de 4GB de RAM. La verdad, he leído respuestas la mar de extravagantes a este tipo de cuestiones: p.e., recomendar SQLite. Yo recomendaría Scalable Strategies for Computing with Massive Data. Entre otras cosas, porque para eso lo escribieron sus autores: para que se lea. Y porque está cargado de razón y buenos consejos. Una cosa con la que tropezará enseguida quien lo hojee es:

Hoy he echado de menos Scala

Hoy he escrito last.date <- max(Filter(function(x) format(x, "%m") == "03", all.filled.data$Date)) y he echado mucho de menos Scala. Más sobre Scala: Si yo fuera rey, todos los niños aprenderían Scala. Al tipo que inventó Scala le gustan tanto o más los oneliners que a mí. Todavía me llevo mal con el compilador. La gente viene a Suiza y aprende el alemán malhablado de aquí; yo, ya véis, Scala. Soy así de sociable.