Dela via


Använda sparklyr

sparklyr är ett R-gränssnitt till Apache Spark. Det ger en mekanism för att interagera med Spark med hjälp av välbekanta R-gränssnitt. Du kan använda sparklyr via Spark batch-jobbdefinitioner eller med interaktiva Microsoft Fabric-notebook-filer.

sparklyr används tillsammans med andra tidyverse-paket som dplyr. Microsoft Fabric distribuerar den senaste stabila versionen av sparklyr och tidyverse med varje körningsversion. Du kan importera dem och börja använda API:et.

Förutsättningar

  • Öppna eller skapa en notebook-fil. Mer information finns i Använda Microsoft Fabric-notebook-filer.

  • Ange språkalternativet SparkR (R) för att ändra det primära språket.

  • Bifoga anteckningsboken till ett sjöhus. Till vänster väljer du Lägg till för att lägga till ett befintligt sjöhus eller för att skapa ett sjöhus.

Anslut sparklyr till Synapse Spark-kluster

Använd följande anslutningsmetod i spark_connect() för att upprätta en sparklyr anslutning. Vi stöder en ny anslutningsmetod med namnet synapse, som gör att du kan ansluta till en befintlig Spark-session. Det minskar sessionens sparklyr starttid avsevärt. Dessutom bidrog vi med den här anslutningsmetoden till öppen källkod d sparklyr-projektet. Med method = "synapse"kan du använda både sparklyr och SparkR i samma session och enkelt dela data mellan 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)

Använda sparklyr för att läsa data

En ny Spark-session innehåller inga data. Det första steget är att antingen läsa in data i Spark-sessionens minne eller peka Spark på platsen för data så att de kan komma åt data på begäran.

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

Med kan sparklyrdu också write och read data från en Lakehouse-fil med hjälp av ABFS-sökvägen. Om du vill läsa och skriva till en Lakehouse lägger du först till den i sessionen. Till vänster i anteckningsboken väljer du Lägg till för att lägga till ett befintligt Lakehouse eller skapa ett Lakehouse.

Om du vill hitta din ABFS-sökväg högerklickar du på mappen Filer i Lakehouse och väljer sedan Kopiera ABFS-sökväg. Klistra in sökvägen som ska ersättas abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files i den här 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)

Använda sparklyr för att manipulera data

sparklyr innehåller flera metoder för att bearbeta data i Spark med hjälp av:

  • dplyr Kommandon
  • SparkSQL
  • Sparks funktionstransformatorer

Använda dplyr

Du kan använda välbekanta dplyr kommandon för att förbereda data i Spark. Kommandona körs i Spark, så det finns inga onödiga dataöverföringar mellan R och Spark.

Klicka på Manipulera data med dplyr för att se extra dokumentation om hur du använder 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 och dplyr översätta R-kommandona till Spark SQL åt oss. Om du vill se den resulterande frågan använder du show_query():

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

Använda SQL

Det går också att köra SQL-frågor direkt mot tabeller i ett Spark-kluster. Objektet spark_connection() implementerar ett DBI-gränssnitt för Spark, så att du kan använda dbGetQuery() för att köra SQL och returnera resultatet som en R-dataram:

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

Använda funktionstransformatorer

Båda de tidigare metoderna förlitar sig på SQL-instruktioner. Spark tillhandahåller kommandon som gör viss datatransformering enklare och utan användning av SQL.

Kommandot förenklar till exempel ft_binarizer() skapandet av en ny kolumn som anger om värdet för en annan kolumn ligger över ett visst tröskelvärde.

Du hittar den fullständiga listan över Spark-funktionstransformatorer som är tillgängliga via sparklyr reference -FT.

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

Dela data mellan sparklyr och SparkR

När du ansluter sparklyr till synapse spark-kluster med method = "synapse"kan du använda både sparklyr och SparkR i samma session och enkelt dela data mellan dem. Du kan skapa en spark-tabell i sparklyr och läsa den från 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)

Maskininlärning

Här är ett exempel där vi använder ml_linear_regression() för att anpassa en linjär regressionsmodell. Vi använder den inbyggda mtcars datamängden och ser om vi kan förutsäga en bils bränsleförbrukning (mpg) baserat på dess vikt (wt) och antalet cylindrar som motorn innehåller (cyl). I varje enskilt fall förutsätter vi att relationen mellan mpg och var och en av våra funktioner är linjär.

Generera datauppsättningar för testning och träning

Använd en delning, 70 % för träning och 30 % för att testa modellen. Om du spelar med det här förhållandet får du olika 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)

Träna modellen

Träna logistic regression-modellen.

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

fit

summary() Använd nu för att lära dig lite mer om kvaliteten på vår modell och den statistiska betydelsen av var och en av våra prediktorer.

summary(fit)

Använda modellen

Du kan använda modellen på testdatauppsättningen genom att anropa ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

En lista över Spark ML-modeller som är tillgängliga via sparklyr finns i Referens – ML

Koppla från Spark-kluster

Du kan anropa spark_disconnect() till eller välja knappen Stoppa session ovanpå notebook-menyfliksområdet och avsluta Spark-sessionen.

spark_disconnect(sc)

Läs mer om R-funktionerna: