Condividi tramite


Usare sparklyr

sparklyr è un'interfaccia R per Apache Spark. Fornisce un meccanismo per interagire con Spark usando interfacce R familiari. È possibile usare sparklyr tramite definizioni di processi batch Spark o con notebook interattivi di Microsoft Fabric.

sparklyr viene usato insieme ad altri pacchetti tidyverse, come dplyr. Microsoft Fabric distribuisce la versione stabile più recente di sparklyr e tidyverse con ogni pubblicazione di runtime. È possibile importarli e iniziare a usare l'API.

Prerequisiti

  • Aprire o creare un notebook. Per scoprire come, consultare Come usare i notebook di Microsoft Fabric.

  • Impostare l'opzione del linguaggio su SparkR (R) per modificare il linguaggio principale.

  • Collegare il notebook a una lakehouse. Sul lato sinistro, selezionare Aggiungi per aggiungere un lakehouse esistente o per crearne uno nuovo.

Connettere sparklyr al cluster Synapse Spark

Per stabilire una connessione spark_connect(), usare il seguente metodo di connessione in sparklyr. Supportiamo un nuovo metodo di connessione chiamato synapse, che consente di connettersi a una sessione Spark esistente. Riduce notevolmente il tempo di avvio della sessione sparklyr. Inoltre, abbiamo contribuito a questo metodo di connessione al progetto sparklyr open source. Con method = "synapse" è possibile usare sia sparklyr che SparkR nella stessa sessione e condividere facilmente i dati tra di essi.

# 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)

Usare sparklyr per leggere i dati

Una nuova sessione Spark non contiene dati. Il primo passaggio consiste nel caricare i dati nella memoria della sessione Spark o puntare Spark verso la posizione dei dati, in modo che possa accedervi su richiesta.

# 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)

Usando sparklyr, è anche possibile write e read dati da un file Lakehouse attraverso il percorso ABFS. Per leggere e scrivere in una Lakehouse, per prima cosa occorre aggiungerla alla sessione. Sul lato sinistro del notebook, selezionare Aggiungi per aggiungere una Lakehouse esistente o per crearne una nuova.

Per trovare il percorso ABFS, fare clic con il pulsante destro del mouse sulla cartella File nella Lakehouse, quindi selezionare Copia percorso ABFS. Incollare il percorso per sostituire abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files nel codice seguente:

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)

Usare sparklyr per manipolare i dati

sparklyr fornisce più metodi per elaborare i dati all'interno di Spark usando:

  • Comandi di dplyr
  • SparkSQL
  • Trasformatori di funzionalità di Spark

Utilizzare dplyr.

È possibile usare comandi familiari dplyr per preparare i dati all'interno di Spark. I comandi vengono eseguiti all'interno di Spark, quindi non avvengono inutili trasferimenti di dati tra R e Spark.

Cliccare su Manipolazione dei dati con dplyr per visualizzare la documentazione aggiuntiva sull'uso di 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 e dplyr convertono i comandi R in Spark SQL al posto nostro. Per visualizzare la query risultante, usare show_query():

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

Usare SQL

È anche possibile eseguire query SQL direttamente su tabelle all'interno di un cluster Spark. L'oggetto spark_connection() implementa un'interfaccia DBI per Spark, consentendo di usare dbGetQuery() per eseguire SQL e restituire il risultato come frame di dati R:

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

Usare i Trasformatori di funzionalità

Entrambi i metodi precedenti si basano su istruzioni SQL. Spark offre comandi che semplificano la trasformazione dei dati e senza ricorrere a SQL.

Ad esempio, il comando ft_binarizer() semplifica la creazione di una nuova colonna che indica se il valore di un'altra colonna supera una determinata soglia.

È possibile ottenere l'elenco completo dei Trasformatori di funzionalità Spark disponibili attraverso sparklyr da Informazioni di riferimento - FT.

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

Condividere dati tra sparklyr e SparkR

Connettendo sparklyr a un cluster spark synapse con method = "synapse", è possibile usare sia sparklyr che SparkR nella stessa sessione e condividere facilmente i dati tra di essi. È possibile creare una tabella Spark in sparklyr e leggerla da 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)

Apprendimento automatico

Ecco un esempio in cui usiamo ml_linear_regression() per adattare un modello di regressione lineare. Usiamo il set di dati predefinito mtcars e verifichiamo se è possibile stimare il consumo di carburante di un'automobile (mpg) in base al peso (wt) e al numero di cilindri del motore (cyl). Presuppone in ogni caso che la relazione tra mpg e ciascuna delle funzionalità sia lineare.

Generare set di dati di training e di testing

Dividere i dati: 70% per il training e 30% per il testing del modello. Giocando con questo rapporto si ottengono modelli diversi.

# 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)

Eseguire il training del modello

Eseguire il training di un modello di regressione logistica.

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

fit

Usare ora summary() per scoprire un po' di più sulla qualità del modello e sull'importanza statistica di ognuno dei predittori.

summary(fit)

Usare il modello

È possibile applicare il modello al set di dati di test chiamando ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

Per un elenco dei modelli di Spark ML disponibili tramite sparklyr, visitare Informazioni di riferimento - ML

Disconnettersi dal cluster Spark

È possibile chiamare spark_disconnect() o selezionare il pulsante Arresta sessione nella parte superiore della barra multifunzione del notebook per terminare la sessione Spark.

spark_disconnect(sc)

Altre informazioni sulle funzionalità R: