Bruk sparklyr

sparklyr er et R-grensesnitt til Apache Spark. Det gir en mekanisme for å samhandle med Spark ved hjelp av kjente R-grensesnitt. Du kan bruke sparklyr gjennom spark batch jobbdefinisjoner eller med interaktive Microsoft Fabric notatblokker.

sparklyr brukes sammen med andre ryddige pakker, for eksempel dplyr. Microsoft Fabric distribuerer den nyeste stabile versjonen av sparklyr og tidyvers med hver runtime-utgivelse. Du kan importere dem og begynne å bruke API-en.

Forutsetning

  • Få et Microsoft Fabric-abonnement. Eller registrer deg for en gratis prøveversjon av Microsoft Fabric.

  • Logg på Microsoft Fabric.

  • Bruk opplevelsesbryteren til venstre på hjemmesiden for å bytte til Synapse Data Science-opplevelsen.

    Screenshot of the experience switcher menu, showing where to select Data Science.

  • Åpne eller opprett en notatblokk. Hvis du vil finne ut hvordan du bruker Microsoft Fabric-notatblokker.

  • Angi språkalternativet til SparkR (R) for å endre primærspråket.

  • Legg notatblokken til et lakehouse. På venstre side velger du Legg til for å legge til et eksisterende innsjøhus eller opprette et innsjøhus.

Koble til sparklyr til Synapse Spark-klynge

Bruk følgende tilkoblingsmetode til spark_connect() å opprette en sparklyr tilkobling. Vi støtter en ny tilkoblingsmetode kalt synapse, som lar deg koble til en eksisterende Spark-økt. Det reduserer sparklyr øktstarttiden dramatisk. I tillegg har vi bidratt med denne tilkoblingsmetoden til åpen kilde d sparklyr-prosjektet. Med method = "synapse"kan du bruke både sparklyr og SparkR i samme økt og enkelt dele data mellom dem.

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

Bruk sparklyr til å lese data

En ny Spark-økt inneholder ingen data. Det første trinnet er enten å laste inn data i Spark-øktens minne, eller peke Spark til plasseringen av dataene slik at de får tilgang til dataene ved behov.

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

Ved hjelp av sparklyrkan du også write og read data fra en Lakehouse-fil bruke ABFS-bane. Hvis du vil lese og skrive til et Lakehouse, må du først legge det til i økten. På venstre side av notatblokken velger du Legg til for å legge til et eksisterende Lakehouse eller opprette et Lakehouse.

Hvis du vil finne ABFS-banen, høyreklikker du på Filer-mappen i Lakehouse, og deretter velger du Kopier ABFS-bane. Lim inn banen for å erstatte abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files i denne koden:

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)

Bruk sparklyr til å manipulere data

sparklyr inneholder flere metoder for å behandle data i Spark ved hjelp av:

  • dplyr Kommandoer
  • SparkSQL
  • Spark-funksjonstransformatorer

Bruke dplyr

Du kan bruke kjente dplyr kommandoer til å klargjøre data i Spark. Kommandoene kjører i Spark, så det er ingen unødvendige dataoverføringer mellom R og Spark.

Klikk manipulering av data med dplyr for å se ekstra dokumentasjon om hvordan du bruker dplyr med 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 og dplyr oversett R-kommandoene til Spark SQL for oss. Slik ser du den resulterende spørringsbruken show_query():

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

Bruk SQL

Det er også mulig å kjøre SQL-spørringer direkte mot tabeller i en Spark-klynge. Objektet spark_connection() implementerer et DBI-grensesnitt for Spark, slik at du kan bruke dbGetQuery() til å kjøre SQL og returnere resultatet som en R-dataramme:

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

Bruk funksjonstransformatorer

Begge de tidligere metodene er avhengige av SQL-setninger. Spark inneholder kommandoer som gjør litt datatransformasjon mer praktisk, og uten bruk av SQL.

Kommandoen forenkler for eksempel ft_binarizer() opprettingen av en ny kolonne som angir om verdien for en annen kolonne er over en bestemt terskel.

Du finner den fullstendige listen over Spark Feature Transformers tilgjengelig sparklyr gjennom fra Reference -FT.

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

Dele data mellom sparklyr og SparkR

Når du kobler sparklyr til spark-klyngen med method = "synapse"synapse, kan du bruke både sparklyr og SparkR i samme økt og enkelt dele data mellom dem. Du kan opprette en spark-tabell i sparklyr og lese den fra 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)

Maskinlæring

Her er et eksempel der vi bruker ml_linear_regression() til å tilpasse en lineær regresjonsmodell. Vi bruker det innebygde mtcars datasettet, og ser om vi kan forutsi bilens drivstofforbruk (mpg) basert på vekten (wt), og antall sylindere motoren inneholder (cyl). Vi antar i hvert tilfelle at relasjonen mellom mpg og hver av funksjonene våre er lineær.

Generer datasett for testing og opplæring

Bruk en deling, 70 % for opplæring og 30 % for testing av modellen. Avspilling med dette forholdet resulterer i ulike modeller.

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

Lære opp modellen

Kalibrer logistikkregresjonsmodellen.

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

fit

summary() Bruk nå til å lære litt mer om kvaliteten på modellen vår, og den statistiske betydningen av hver av våre prediktorer.

summary(fit)

Bruk modellen

Du kan bruke modellen på testdatasettet ved å ringe ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

Hvis du vil ha en liste over Spark ML-modeller som er tilgjengelige via sparklyr, kan du gå til Referanse – ML

Koble fra Spark-klynge

Du kan ringe spark_disconnect() til eller velge Stopp økt-knappen øverst på notatblokkbåndet for å avslutte Spark-økten.

spark_disconnect(sc)

Mer informasjon om R-funksjonaliteten: