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 tidyverse-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

  • Få et Microsoft Fabric-abonnement. Du kan også tilmelde dig en gratis Prøveversion af Microsoft Fabric.

  • Log på Microsoft Fabric.

  • Brug oplevelsesskifteren i venstre side af startsiden til at skifte til Synapse Data Science-oplevelsen.

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

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

  • Angiv sprogindstillingen til 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 sessionens sparklyr starttidspunkt drastisk. Derudover har vi bidraget med denne forbindelsesmetode til åben kildekode d sparklyr-projektet. Med method = "synapse"kan du bruge både 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 den sti, der skal erstattes 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æt 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 for 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 forenkler f.eks ft_binarizer() . 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, som du kan få adgang til via sparklyrReference -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 opretter forbindelse sparklyr til synapse spark-klyngen medmethod = "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 tilpasse 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ære modellen

Oplær modellen Logistisk regression.

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

fit

Brug summary() nu 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, under Reference – ML

Afbryd forbindelsen til Spark-klyngen

Du kan ringe spark_disconnect() til eller vælge knappen Stop session oven på båndet i notesbogen og afslutte din Spark-session.

spark_disconnect(sc)

Få mere at vide om R-funktionerne: