Del via


Brug sparklyr

sparklyr er en R-grænseflade til Apache Spark. Det giver en mekanisme til at interagere med Spark ved hjælp af velkendte R-grænseflader. Du kan bruge sparklyr via Spark-batchjobdefinitioner eller med interaktive Microsoft Fabric-notesbøger.

sparklyr bruges sammen med andre ryddelige pakker, f.eks. dplyr. Microsoft Fabric distribuerer den nyeste stabile version af sparklyr og tidyverse med hver kørselsversion. Du kan importere dem og begynde at bruge API'en.

Forudsætninger

  • Åbn eller opret en notesbog. Du kan få mere at vide under Sådan bruger du Microsoft Fabric-notesbøger.

  • Angiv sprogindstillingen for at SparkR (R) for at ændre det primære sprog.

  • Vedhæft din notesbog til et lakehouse. I venstre side skal du vælge Tilføj for at tilføje et eksisterende lakehouse eller for at oprette et lakehouse.

Forbind sparklyr til Synapse Spark-klyngen

Brug følgende forbindelsesmetode i spark_connect() til at oprette en sparklyr forbindelse. Vi understøtter en ny forbindelsesmetode kaldet synapse, som giver dig mulighed for at oprette forbindelse til en eksisterende Spark-session. Det reducerer starttidspunktet for sparklyr session drastisk. Derudover har vi bidraget med denne forbindelsesmetode til sparklyrprojekt med åben kildekode. Med method = "synapse"kan du både bruge sparklyr og SparkR i den samme session og nemt dele data mellem 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)

Brug sparklyr til at læse data

En ny Spark-session indeholder ingen data. Det første trin er enten at indlæse data i spark-sessionens hukommelse eller pege Spark på placeringen af dataene, så den kan få adgang til dataene efter 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 hjælp af sparklyrkan du også write og read data fra en Lakehouse-fil ved hjælp af ABFS-stien. Hvis du vil læse og skrive til et Lakehouse, skal du først føje det til din session. I venstre side af notesbogen skal du vælge Tilføj for at tilføje et eksisterende Lakehouse eller oprette et Lakehouse.

Hvis du vil finde din ABFS-sti, skal du højreklikke på mappen filer i lakehouse og derefter vælge Kopiér ABFS-sti. Indsæt stien for at erstatte abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files i denne kode:

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)

Brug sparklyr til at manipulere data

sparklyr indeholder flere metoder til behandling af data i Spark ved hjælp af:

  • dplyr kommandoer
  • SparkSQL
  • Sparks funktionstransformere

Brug dplyr

Du kan bruge velkendte dplyr kommandoer til at forberede data i Spark. Kommandoerne kører i Spark, så der er ingen unødvendige dataoverførsler mellem R og Spark.

Klik på Manipulation af data med dplyr for at se ekstra dokumentation om brug af 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 oversætte R-kommandoerne til Spark SQL for os. Hvis du vil se den resulterende forespørgsel, skal du bruge show_query():

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

Brug SQL

Det er også muligt at udføre SQL-forespørgsler direkte mod tabeller i en Spark-klynge. Objektet spark_connection() implementerer en DBI- grænseflade til Spark, så du kan bruge dbGetQuery() til at udfø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")

Brug funktionstransformere

Begge de forrige metoder er afhængige af SQL-sætninger. Spark indeholder kommandoer, der gør nogle datatransformationer mere praktiske og uden brug af SQL.

Kommandoen ft_binarizer() forenkler f.eks. oprettelsen af en ny kolonne, der angiver, om værdien af en anden kolonne er over en bestemt grænse.

Du kan finde den komplette liste over Spark Feature Transformers, der er tilgængelige via sparklyr fra Reference -FT.

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

Del data mellem sparklyr og SparkR

Når du oprette forbindelse sparklyr til synapse spark-klyngen med method = "synapse", kan du bruge både sparklyr og SparkR i den samme session og nemt dele data mellem dem. Du kan oprette en sparktabel i sparklyr og læse 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)

Maskinel indlæring

Her er et eksempel, hvor vi bruger ml_linear_regression() til at passe til en lineær regressionsmodel. Vi bruger det indbyggede mtcars datasæt og ser, om vi kan forudsige en bils brændstofforbrug (mpg) baseret på dens vægt (wt), og antallet af cylindre, som motoren indeholder (cyl). Vi antager i hvert enkelt tilfælde, at relationen mellem mpg og hver af vores funktioner er lineær.

Generér test- og oplæringsdatasæt

Brug en opdeling, 70% til oplæring og 30% til test af modellen. Hvis du leger med dette forhold, resulterer det i forskellige 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)

Oplær modellen

Oplær modellen Logistisk regression.

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

fit

Brug nu summary() til at lære lidt mere om kvaliteten af vores model og den statistiske betydning af hver af vores forudsigelser.

summary(fit)

Brug modellen

Du kan anvende modellen på testdatasættet ved at kalde ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

Du kan finde en liste over Spark ML-modeller, der er tilgængelige via sparklyr, Reference – ML-

Afbryd forbindelsen til Spark-klyngen

Du kan kalde spark_disconnect() til eller vælge knappen Stop session øverst på notesbogbåndet for at afslutte din Spark-session.

spark_disconnect(sc)

Få mere at vide om R-funktionerne: