Como paralelizar o código R com spark.lapply

A paralelização do código R é difícil, porque o código R funciona no controlador e os dados R.frames não são distribuídos. Muitas vezes, existe um código R existente que é executado localmente e que é convertido para correr em Apache Spark. Noutros casos, algumas funções de SparkR utilizadas para análise estatística avançada e técnicas de machine learning podem não suportar a computação distribuída. Nesses casos, a API sparkr UDF pode ser utilizada para distribuir a carga de trabalho desejada por um cluster.

Caso de utilização de exemplo: Pretende formar vários modelos de aprendizagem automática nos mesmos dados, por exemplo, para afinação de hipermetrões. Se o conjunto de dados se adequar a cada trabalhador, pode ser mais eficiente utilizar a API SparkR UDF para treinar várias versões do modelo ao mesmo tempo.

A spark.lapply função permite-lhe desempenhar a mesma tarefa em vários trabalhadores, executando uma função sobre uma lista de elementos. Para cada elemento de uma lista:

  1. Envie a função a um trabalhador.
  2. Execute a função.
  3. Devolva o resultado de todos os trabalhadores como lista ao motorista.

No exemplo seguinte, um modelo de máquina de vetor de suporte está ajustado no iris conjunto de dados com validação cruzada de 3 vezes, enquanto o custo é variado de 0,5 a 1 por incrementos de 0.1. A saída é uma lista com o resumo dos modelos para os vários parâmetros de custo.

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

Deve instalar pacotes em todos os trabalhadores.