Compartir por


Uso de sparklyr

sparklyr es una interfaz de R para Apache Spark. Proporciona un mecanismo para interactuar con Spark mediante interfaces de R conocidas. Puede usar sparklyr a través de definiciones de trabajos por lotes de Spark o con cuadernos interactivos de Microsoft Fabric.

sparklyr se utiliza junto con otros paquetes de tidyverse, como dplyr. Microsoft Fabric distribuye la versión estable más reciente de sparklyr y tidyverse con cada lanzamiento de entorno de ejecución. Puede importarlos y empezar a usar la API.

Prerrequisitos

  • Abra o cree un cuaderno. Para obtener información sobre cómo, consulte Uso de cuadernos de Microsoft Fabric.

  • Establezca la opción de idioma en SparkR (R) para cambiar el idioma principal.

  • Adjunte su bloc de notas a un lago de datos. En el lado izquierdo, seleccione Añadir para añadir un almacén de lago existente o crear uno.

Conexión de sparklyr al clúster de Spark de Synapse

Use el siguiente método de conexión en spark_connect() para establecer una conexión sparklyr. Se admite un nuevo método de conexión denominado synapse, que permite conectarse a una sesión de Spark existente. Reduce drásticamente la hora de inicio de la sesión sparklyr. Además, hemos contribuido este método de conexión al proyecto de código abierto sparklyr. Con method = "synapse", puede usar sparklyr y SparkR en la misma sesión y compartir datos entre ellos fácilmente.

# connect sparklyr to your spark cluster
spark_version <- sparkR.version()
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", method = "synapse", config = config)

Uso de sparklyr para leer datos

Una nueva sesión de Spark no contiene datos. El primer paso consiste en cargar datos en la memoria de la sesión de Spark o apuntar Spark a la ubicación de los datos para que pueda acceder a los datos a petición.

# load the sparklyr package
library(sparklyr)

# copy data from R environment to the Spark session's memory
mtcars_tbl <- copy_to(sc, mtcars, "spark_mtcars", overwrite = TRUE)

head(mtcars_tbl)

Con sparklyr, también puede write y read datos de un archivo de Lakehouse mediante la ruta de acceso de ABFS. Para leer y escribir en una instancia de Lakehouse, agréguela primero a la sesión. En el lado izquierdo del cuaderno, seleccione Agregar para agregar una instancia de Lakehouse existente o crear una instancia de Lakehouse.

Para encontrar la ruta de acceso de ABFS, haga clic con el botón derecho en la carpeta Archivos de Lakehouse y seleccione Copiar ruta de acceso de ABFS. Pegue su ruta para reemplazar abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files en este código:

temp_csv = "abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files/data/mtcars.csv"

# write the table to your lakehouse using the ABFS path
spark_write_csv(mtcars_tbl, temp_csv, header = TRUE, mode = 'overwrite')

# read the data as CSV from lakehouse using the ABFS path
mtcarsDF <- spark_read_csv(sc, temp_csv) 
head(mtcarsDF)

Uso de sparklyr para manipular datos

sparklyr proporciona varios métodos para procesar datos dentro de Spark mediante:

  • comandos de dplyr
  • SparkSQL
  • Transformadores de características de Spark

Utilice dplyr

Puede usar comandos dplyr conocidos para preparar datos dentro de Spark. Los comandos se ejecutan dentro de Spark, por lo que no hay transferencias de datos innecesarias entre R y Spark.

Haga clic en Manipulación de datos con dplyr para ver documentación adicional sobre el uso de dplyr con Spark.

# count cars by the number of cylinders the engine contains (cyl), order the results descendingly
library(dplyr)

cargroup <- group_by(mtcars_tbl, cyl) %>%
  count() %>%
  arrange(desc(n))

cargroup

sparklyr y dplyr nos traducen los comandos de R a Spark SQL. Para ver la consulta resultante use show_query():

# show the dplyr commands that are to run against the Spark connection
dplyr::show_query(cargroup)

Uso de SQL

También es posible ejecutar consultas SQL directamente en tablas dentro de un clúster de Spark. El objeto spark_connection() implementa una interfaz de DBI para Spark, por lo que puede usar dbGetQuery() para ejecutar SQL y devolver el resultado como una trama de datos de R:

library(DBI)
dbGetQuery(sc, "select cyl, count(*) as n from spark_mtcars
GROUP BY cyl
ORDER BY n DESC")

Uso de transformadores de características

Ambos métodos anteriores se basan en instrucciones SQL. Spark proporciona comandos que hacen que algunas transformaciones de datos sean más cómodas y sin el uso de SQL.

Por ejemplo, el comando ft_binarizer() simplifica la creación de una nueva columna que indica si el valor de otra columna está por encima de un umbral determinado.

Puede encontrar la lista completa de los transformadores de características de Spark disponibles a través de sparklyr en lareferencia -FT.

mtcars_tbl %>% 
  ft_binarizer("mpg", "over_20", threshold = 20) %>% 
  select(mpg, over_20) %>% 
  head(5)

Compartir datos entre sparklyr y SparkR

Al conectar sparklyr al clúster de Spark de Synapse con method = "synapse", puede usar tanto sparklyr como SparkR en la misma sesión y compartir fácilmente datos entre ellos. Puede crear una tabla de Spark en sparklyr y leerla desde SparkR.

# load the sparklyr package
library(sparklyr)

# Create table in `sparklyr`
mtcars_sparklyr <- copy_to(sc, df = mtcars, name = "mtcars_tbl", overwrite = TRUE, repartition = 3L)

# Read table from `SparkR`
mtcars_sparklr <- SparkR::sql("select cyl, count(*) as n
from mtcars_tbl
GROUP BY cyl
ORDER BY n DESC")

head(mtcars_sparklr)

Aprendizaje automático

Este es un ejemplo en el que usamos ml_linear_regression() para ajustarse a un modelo de regresión lineal. Usamos el conjunto de datos integrado mtcars y vemos si podemos predecir el consumo de combustible de un automóvil (mpg) en función de su peso (wt) y el número de cilindros que contiene el motor (cyl). Se supone en cada caso que la relación entre mpg y cada una de nuestras características es lineal.

Generación de conjuntos de datos de prueba y entrenamiento

Use una división, el 70 % para el entrenamiento y el 30 % para probar el modelo. Jugar con esta relación da como resultado diferentes modelos.

# split the dataframe into test and training dataframes

partitions <- mtcars_tbl %>%
  select(mpg, wt, cyl) %>% 
  sdf_random_split(training = 0.7, test = 0.3, seed = 2023)

Entrenamiento del modelo

Entrene el modelo de regresión logística.

fit <- partitions$training %>%
  ml_linear_regression(mpg ~ .)

fit

Ahora use summary() para obtener más información sobre la calidad de nuestro modelo y la importancia estadística de cada uno de nuestros predictores.

summary(fit)

Uso del modelo

Puede aplicar el modelo en el conjunto de datos de prueba llamando a ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

Para obtener una lista de los modelos de Spark ML disponibles a través de sparklyr, visite Referencia: ML

Desconexión del clúster de Spark

Puede llamar a spark_disconnect() o seleccionar el botón Detener sesión en la parte superior de la cinta de opciones del cuaderno para finalizar la sesión de Spark.

spark_disconnect(sc)

Más información sobre las funcionalidades de R: