Sparklyr 0.5: Mejoras de Livy y dplyr

publicado en: rstudio | 0

Estamos felices de anunciar que la versión 0.5 del paquete Sparklyr está ahora disponible en CRAN. La nueva versión viene con muchas mejoras respecto a la primera versión, incluyendo:

  • Extendió el soporte de dplyr implementando: do() y n_distinct().

  • Nuevas funciones incluyendo sdf_quantile(), ft_tokenizer() y ft_regex_tokenizer().

  • Mejora de la compatibilidad , sparklyr ahora respeta el valor de la opción R de $0027na.action$0027 y dim(), nrow() y ncol().

  • Soporte experimental para Livy para permitir a los clientes, incluyendo RStudio, conectarse remotamente a Apache Spark.

  • Mejora de las conexiones simplificando la inicialización y proporcionando diagnósticos de error.

  • Certificado sparklyr, RStudio Server Pro y ShinyServer Pro con Cloudera.

  • Actualizado spark.rstudio.com con nuevos ejemplos de despliegue y una hoja de trucos de sparklyr.

Los cambios y mejoras adicionales se pueden encontrar en el archivo de NOTICIAS de Sparklyr.

Para preguntas o comentarios, por favor, siéntase libre de abrir un número de sparklyr github o una pregunta de sparklyr stackoverflow.

Soporte de dplyr extendido

sparklyr 0.5 añade soporte para n_distinct() como un equivalente más rápido y conciso de length(unique(x)) y también añade soporte para do() como una forma conveniente de realizar múltiples cálculos en serie sobre una operación group_by():

biblioteca(sparklyr)
sc <- spark_connect(master = "local")
mtcars_tbl <- copy_to(sc, mtcars, overwrite = TRUE)
by_cyl <- group_by(mtcars_tbl, cyl)
fit_sparklyr <- by_cyl % >%
   do(mod = ml_linear_regression(mpg ~ disp, data = .))
# display results
fit_sparklyr$mod

En este caso, . representa un Spark DataFrame, que nos permite realizar operaciones a escala (como esta regresión lineal) para un pequeño conjunto de grupos. Sin embargo, como cada operación de grupo se realiza de forma secuencial, no se recomienda utilizar do() con un gran número de grupos. El código anterior realiza múltiples regresiones lineales con la siguiente salida:

[[1]]]
Llamada: ml_linear_regression(mpg ~ disp, data = .)
Coeficientes:
 (Interceptar) disp
19.081987419 0.003605119
[[2]]
Llamada: ml_linear_regression(mpg ~ disp, data = .)
Coeficientes:
(Interceptar) disp
 40.8719553 -0.1351418
[[3]]
Llamada: ml_linear_regression(mpg ~ disp, data = .)
Coeficientes:
(Interceptar) disp
22.03279891 -0.01963409

Cabe mencionar que, si bien el Sparklyr proporciona un apoyo integral para el dplyr, éste no es estrictamente necesario cuando se utiliza el Sparklyr. Por ejemplo, uno puede hacer uso de DBI sin dplyr de la siguiente manera:

biblioteca(sparklyr)
biblioteca (DBI)
sc <- spark_connect(master = "local")
sdf_copy_to(sc, iris)
dbGetQuery(sc, "SELECCIONE * DEL LÍMITE DEL IRIS 4")
 Sepal_Longitud Sepal_Ancho Petal_Longitud Petal_Ancho Especies
1 5.1 3.5 1.4 0.2 setosa
2 4,9 3,0 1,4 0,2 setosa
3 4,7 3,2 1,3 0,2 setosa
4 4,6 3,1 1,5 0,2 setosa
5 5.0 3.6 1.4 0.2 setosa

Nuevas funciones

La nueva función sdf_quantile() calcula cuantiles aproximados (hasta cierto error relativo), mientras que las nuevas funciones ft_tokenizer() y ft_regex_tokenizer() dividen una cadena por espacios en blanco o patrones regex.

Por ejemplo, ft_tokenizer() puede utilizarse de la siguiente manera:

biblioteca(sparklyr)
biblioteca(janeaustenr)
biblioteca(dplyr)
sc
  spark_dataframe() %>%
  na.omit() % % ...
  ft_tokenizer(input.col = "texto", output.col = "fichas") %>%
  head(4)

Lo que produce el siguiente resultado:

 fichas de libros de texto
                  ...lista..;
1 SENTIDO Y SENSIBILIDAD Sentido y amplificación; Sensibilidad
2 Sentido y amplificación; Sensibilidad;
3 por Jane Austen Sense & Sensibilidad <list [3]>
4 Sense & Sensibilidad <list [1]>

Las fichas se pueden seguir procesando a través de, por ejemplo, HashingTF.

Compatibilidad mejorada

«na.action» es un parámetro aceptado como parte del argumento «ml.options», que por defecto es getOption(«na.action», «na.omit»). Esto permite a sparklyr coincidir con el comportamiento de R mientras procesa los registros NA, por ejemplo, el siguiente modelo lineal deja caer el registro NA apropiadamente:

biblioteca(sparklyr)
biblioteca(dplyr)
biblioteca(nycflights13)
sc <- spark_connect(master = "local")
flights_clean <- na.omit(copy_to(sc, flights))
ml_regresión_linear(
  flights_tbl
  respuesta = "dep_delay",
  features = c("arr_delay", "arr_time"))
* Dejó caer 9430 filas con "na.omit" (336776 = $0027; 327346)
Llamada: ml_regresión_linear(flights_tbl, respuesta = "dep_delay",
                           features = c("arr_delay", "arr_time"))
Coeficientes:
 (Intercepción) arr_delay arr_time
6.1001212994 0.8210307947 0.0005284729

Además, dim(), nrow() y ncol() están ahora soportados contra Spark DataFrames.

Conexiones vivas

Livy, «An Open Source REST Service for Apache Spark (Apache License)» , está ahora disponible en sparklyr 0.5 como una característica experimental. Entre muchos escenarios, esto permite conexiones desde el escritorio de RStudio a Apache Spark cuando Livy está disponible y correctamente configurado en el clúster remoto.

Livy corriendo localmente

Para trabajar con Livy localmente, sparklyr soporta livy_install() que instala Livy en tu entorno local, esto es similar a spark_install(). Como Livy es un servicio para habilitar conexiones remotas en Apache Spark, el servicio necesita ser iniciado con livy_service_start(). Una vez que el servicio se está ejecutando, spark_connect() necesita hacer referencia al servicio en ejecución y usar el método = «Livy», entonces sparklyr puede ser usado como siempre. A continuación, un breve ejemplo:

livy_install()
livy_service_start()
sc <- spark_connect(master = "http://localhost:8998",
                    método = "livy")
copy_to(sc, iris)
spark_disconnect(sc)
livy_service_stop()

Livy corriendo en HDInsight

Microsoft Azure soporta clusters de Apache Spark configurados con Livy y protegidos con autenticación básica en clusters HDInsight. Para usar sparklyr con clusters HDInsight a través de Livy, primero crea el clúster HDInsight con soporte para Spark:

Creando un cluster de chispas en el Microsoft Azure HDInsight

Una vez creado el cúmulo, puedes conectarte con Sparklyr de la siguiente manera:

biblioteca(sparklyr)
biblioteca(dplyr)
config <- livy_config(user = "admin", password = "password")
sc <- spark_connect(master = "https://dm.azurehdinsight.net/livy/",
                    método = "livy",
                    config = config)
copy_to(sc, iris)

Desde un escritorio con RStudio, la conexión remota se ve así:

Conexiones mejoradas

sparklyr 0.5 ya no requiere conexión a internet para descargar paquetes adicionales de Apache Spark. Esto permite conexiones en clusters seguros que no tienen acceso a Internet o mientras se está desplazando.

Algunos miembros de la comunidad informaron de un error genérico «El archivo de puertos no existe» al conectarse con el sparklyr 0.4. En 0.5, hemos depreciado el archivo de puertos y mejorado el informe de errores. Por ejemplo, el siguiente ejemplo de conexión inválida arroja: un error descriptivo, los parámetros de envío de chispas y la información de registro que nos ayuda a solucionar los problemas de conexión.

>; biblioteca(sparklyr)
sc <- spark_connect(master = "local",
                      config = list("sparklyr.gateway.port" = "0"))
Error en el force(code) :
  Falló mientras se conectaba a sparklyr al puerto (0) para sessionid (5305):
  La puerta en el puerto (0) no respondió.
  Camino: /spark-1.6.2-bin-hadoop2.6/bin/spark-subir
  Parámetros: --clase, sparklyr.Backend, $0027sparklyr-1.6-2.10.jar$0027, 0, 5305
---- Registro de salida ----
16/12/12 12:42:35 INFO sparklyr: Inicio de la sesión (5305)
---- Registro de errores ----

Se pueden encontrar detalles técnicos adicionales en la solicitud de extracción de la puerta de enlace del Sparklyr.

Certificación de la nube

sparklyr 0.4, sparklyr 0.5, RStudio Server Pro 1.0 y ShinyServer Pro 1.5 pasaron por la certificación de Cloudera y ahora están certificados con Cloudera. Entre varios beneficios, las características de autenticación como Kerberos, han sido probadas y validadas contra clusters seguros.

Para más información ver la lista de socios de Cloudera.

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *