Scala

Metropolis-Hastings en Scala

Tengo la sensación de que un lenguaje funcional (como Scala) está particularmente bien adaptado al tipo de operaciones que exige MCMC.

Juzguen Vds.

Primero, genero datos en R:

datos <- rnorm(500, 0.7, 1)
writeLines(as.character(datos), "/tmp/datos.txt")

Son de una normal con media 0.7. En el modelo que vamos a crear, suponemos conocida (e igual a 1) la varianza de la normal y trataremos de estimar la media suponiéndole una distribución a priori normal estándar. Y con Scala, así:

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.mapValues(y => x(y))
        for((k,v) <- cols) yield tmp + ("var" -> k, "value" -> x(v))
}

val df = origDF.flatMap(x => melt(x, ids, cols))

val newStructure = StructType( ids.values.map(x => origDF.schema(x)).toList ::: List(StructField("var", StringType), StructField("value", DoubleType)) )
val meltDF = sqlContext.applySchema(df.map(x => Row.fromSeq(x.values.toList)), newStructure)

/** cast **/

val castDF = meltDF.groupBy("id").pivot("var").sum("value")

Spam 2.0 (increíblemente bien hecho)

Recibí recientemente este correo (con los enlaces que aparecen en él; solo he eliminado el apellido de la remitente):

Subject: Carlos - Scala resource

Hi Carlos,

I was doing some research for our students here at Udemy on people using Scala resources and when I came across your site, saw you were using the tutorial from Wikipedia.

We really like that resource, and actually created our own that we think is a perfect supplement! This Scala tutorial is text-and image based, easy to search for quick answers, and super helpful for anyone: as a base for learning or as a reference guide.

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.
  • Detrás de Scala vendrá Spark.

Grid, Scala y arbolitos fractales

Inspirado por

  • los arbolitos que he visto esta mañana en mi semivuelta al lago de Zúrich,
  • las cosas que estoy leyendo últimamente sobre el paquete grid de R (p.e., grid graphics, de Murrell)
  • mi curso de scala y
  • este enlace

me he decidido a reescribirlo como Dios manda (y no como de primeras se le ocurriría a un neoingeniero al que solo le han enseñado MatLab y que, por lo tanto, tiene vetado el acceso a cualquier tipo de empresa tecnológica puntera). Me ha quedado así: