Condividi tramite


Utilizzare sparklyr

La risorsa sparklyr del linguaggio R funge da interfaccia per Apache Spark. La risorsa sparklr fornisce un meccanismo per interagire con Spark con interfacce R familiari. Usare sparklyr tramite definizioni di processi batch Spark o con notebook interattivi di Microsoft Fabric.

sparklyr viene usato con altri pacchetti tidyverse , ad esempio dplyr. Microsoft Fabric distribuisce la versione stabile più recente di sparklyr e tidyverse con ogni versione di runtime. È possibile importare queste risorse 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.

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

Connettere sparklyr al cluster Synapse Spark

Il spark_connect() metodo di connessione della funzione stabilisce una sparklyr connessione. La funzione compila un nuovo metodo di connessione denominato synapse, che si connette a una sessione Spark esistente. Riduce notevolmente il tempo di avvio della sessione sparklyr. Questo metodo di connessione è disponibile nel progetto sparklyr open source. Con method = "synapse"è possibile usare sia che sparklyrSparkR nella stessa sessione e condividere facilmente i dati tra di essi. L'esempio di codice della cella del notebook seguente usa la funzione spark_connect().

# 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. È quindi necessario caricare i dati nella memoria della sessione Spark oppure puntare Spark al percorso dei dati in modo che la sessione possa accedere ai dati 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)

Con sparklyr, è anche possibile write e read i dati da un file Lakehouse usando un valore di percorso ABFS. Per leggere e scrivere in una Lakehouse, per prima cosa aggiungere la Lakehouse alla sessione. Sul lato sinistro del notebook selezionare Aggiungi per aggiungere un lakehouse esistente. Inoltre, è possibile creare una Lakehouse.

Per trovare il percorso ABFS, selezionare la cartella File in Lakehouse e selezionare Copia percorso ABFS. Incolla il tuo percorso per sostituire abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files nel seguente esempio di codice:

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)

Utilizzare sparklyr per manipolare i dati

sparklyr offre diversi modi per elaborare i dati all'interno di Spark, con:

  • 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, impedendo trasferimenti di dati non necessari tra R e 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

La risorsa Manipolare i dati con dplyr offre ulteriori informazioni sull'uso di dplyr con Spark. sparklyr e dplyr traducono i comandi R in Spark SQL. Usare show_query() per visualizzare la query risultante:

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

Utilizzare 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 alcune trasformazioni dei dati, senza l'uso di SQL. Ad esempio, il ft_binarizer() comando semplifica la creazione di una nuova colonna che indica se un valore in un'altra colonna supera una determinata soglia:

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

La risorsa Reference -FT offre un elenco completo dei trasformatori di funzionalità Spark disponibili tramite sparklyr.

Condividere dati tra sparklyr e SparkR

Quando ti connetti sparklyr al cluster Synapse Spark con method = "synapse", sia sparklyr che SparkR diventano disponibili nella stessa sessione e possono condividere facilmente i dati fra loro. È possibile creare una tabella Spark in sparklyre 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

Nell'esempio seguente viene ml_linear_regression() usato per adattare un modello di regressione lineare. Il modello usa il set di dati predefinito mtcars per tentare di stimare il consumo di carburante (mpg) di un'auto in base al peso (wt) dell'auto e al numero di cilindri (cyl) del motore dell'auto. Tutti i casi qui presuppongono una relazione lineare tra mpg e ognuna delle nostre caratteristiche.

Generare set di dati di testing e di training

Usare una divisione del 70%% per l'addestramento e del 30%% per testare il modello. Le modifiche apportate a questo rapporto portano a 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 l'addestramento del modello

Addestrare il modello di regressione logistica.

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

fit

Usare summary() per altre informazioni sulla qualità del modello e sul significato statistico di ognuno dei predittori:

summary(fit)

Usare il modello

Chiamare ml_predict() per applicare il modello al set di dati di test:

pred <- ml_predict(fit, partitions$test)

head(pred)

Per un elenco dei modelli di Spark ML disponibili tramite Sparklyr, vedere Informazioni di riferimento - Ml .

Disconnetti dal cluster Spark

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: