Cómo paralelizar código de R con spark.lapply

La paralelización del código de R es difícil, ya que el código de R se ejecuta en el controlador y los data.frames de R no se distribuyen. A menudo, hay código de R existente que se ejecuta localmente y que se convierte para ejecutarse en Apache Spark. En otros casos, es posible que algunas funciones de SparkR que se usan para el análisis estadístico avanzado y las técnicas de aprendizaje automático no admitan la computación distribuida. En tales casos, se puede usar la API de UDF de SparkR para distribuir la carga de trabajo deseada en un clúster.

Caso de uso de ejemplo: quiere entrenar varios modelos de aprendizaje automático en los mismos datos, por ejemplo, para el ajuste de hiperpará parámetros. Si el conjunto de datos se ajusta a cada trabajo, puede ser más eficaz usar la API de UDF de SparkR para entrenar varias versiones del modelo a la vez.

La spark.lapply función permite realizar la misma tarea en varios trabajadores mediante la ejecución de una función en una lista de elementos. Para cada elemento de una lista:

  1. Envíe la función a un trabajo.
  2. Ejecute la función .
  3. Devuelve el resultado de todos los trabajadores como una lista al controlador.

En el ejemplo siguiente, un modelo de máquina de vectores de soporte se ajusta al conjunto de datos con validación cruzada de tres veces, mientras que el costo varía de iris 0,5 a 1 en incrementos de 0,1. La salida es una lista con el resumen de los modelos para los distintos parámetros de costo.

library(SparkR)

spark.lapply(seq(0.5, 1, by = 0.1), function(x) {
  library(e1071)
  model <- svm(Species ~ ., iris, cost = x, cross = 3)
  summary(model)
})

Nota

Debe instalar paquetes en todos los trabajadores.