Delen via


Sparklyr gebruiken

sparklyr- is een R-interface voor Apache Spark. Het biedt een mechanisme voor interactie met Spark met behulp van vertrouwde R-interfaces. U kunt sparklyr gebruiken via Spark Batch-taakdefinities of met interactieve Microsoft Fabric-notebooks.

sparklyr wordt samen met andere tidyverse pakketten zoals dplyr-gebruikt. Microsoft Fabric distribueert de nieuwste stabiele versie van sparklyr en tidyverse met elke runtimerelease. U kunt ze importeren en de API gaan gebruiken.

Voorwaarden

  • Open of maak een notitieblok. Om te leren hoe, zie Hoe u Microsoft Fabric-notebooks kunt gebruiken.

  • Stel de taaloptie in op SparkR- om de primaire taal te wijzigen.

  • Koppel uw notitieblok aan een lakehouse. Selecteer aan de linkerkant Voeg toe om een bestaand lakehouse toe te voegen of om een lakehouse te maken.

Sparklyr verbinden met Synapse Spark-cluster

Gebruik de volgende verbindingsmethode in spark_connect() om een sparklyr verbinding tot stand te brengen. We ondersteunen een nieuwe verbindingsmethode met de naam synapse, waarmee u verbinding kunt maken met een bestaande Spark-sessie. Het vermindert de starttijd van de sparklyr sessie aanzienlijk. Daarnaast hebben we deze verbindingsmethode bijgedragen aan het open source sparklyr-project. Met method = "synapse"kunt u zowel sparklyr als SparkR in dezelfde sessie gebruiken en eenvoudig gegevens tussen dezedelen.

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

Sparklyr gebruiken om gegevens te lezen

Een nieuwe Spark-sessie bevat geen gegevens. De eerste stap is het laden van gegevens in het geheugen van uw Spark-sessie, of Spark naar de locatie van de gegevens verwijzen, zodat deze toegang heeft tot de gegevens op aanvraag.

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

Met sparklyrkunt u ook gegevens write en read uit een Lakehouse-bestand met behulp van het ABFS-pad. Om te lezen en te schrijven naar een Lakehouse, voeg deze eerst toe aan uw sessie. Selecteer aan de linkerkant van het notitieblok Add om een bestaand Lakehouse toe te voegen of een Lakehouse te maken.

Als u uw ABFS-pad wilt vinden, klikt u met de rechtermuisknop op de map Bestanden in uw Lakehouse en selecteert u vervolgens ABFS-pad kopiƫren. Plak uw pad om abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files in deze code te vervangen:

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)

Sparklyr gebruiken om gegevens te bewerken

sparklyr biedt meerdere methoden voor het verwerken van gegevens in Spark met behulp van:

  • opdrachten voor dplyr
  • SparkSQL
  • Functietransformatoren van Spark

Gebruik dplyr

U kunt vertrouwde dplyr opdrachten gebruiken om gegevens in Spark voor te bereiden. De opdrachten worden uitgevoerd in Spark, dus er zijn geen onnodige gegevensoverdrachten tussen R en Spark.

Klik op de Gegevens bewerken met dplyr om extra documentatie weer te geven over het gebruik van dplyr met 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 en dplyr de R-opdrachten voor ons vertalen naar Spark SQL. Als u de resulterende query wilt zien, gebruikt u show_query():

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

SQL gebruiken

Het is ook mogelijk om SQL-query's rechtstreeks uit te voeren op tabellen in een Spark-cluster. Het spark_connection() -object implementeert een DBI--interface voor Spark, zodat u dbGetQuery() kunt gebruiken om SQL uit te voeren en het resultaat als een R-gegevensframe te retourneren:

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

Functietransformatoren gebruiken

Beide methoden zijn afhankelijk van SQL-instructies. Spark biedt opdrachten die sommige gegevenstransformatie handiger maken en zonder sql te gebruiken.

De opdracht ft_binarizer() vereenvoudigt bijvoorbeeld het maken van een nieuwe kolom die aangeeft of de waarde van een andere kolom boven een bepaalde drempelwaarde ligt.

U vindt de volledige lijst met Spark-functietransformatoren die beschikbaar zijn via sparklyr van Reference -FT.

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

Gegevens delen tussen sparklyr en SparkR

Wanneer u sparklyrverbindt met een Synapse Spark-cluster met method = "synapse", kunt u zowel sparklyr als SparkR in dezelfde sessie gebruiken en eenvoudig gegevens tussen deze clusters delen. U kunt een Spark-tabel maken in sparklyr en deze lezen uit 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)

Machine learning

Hier volgt een voorbeeld waarin we ml_linear_regression() gebruiken om een lineair regressiemodel aan te passen. We gebruiken de ingebouwde mtcars gegevensset en kijken of we het brandstofverbruik (mpg) van een auto kunnen voorspellen op basis van het gewicht (wt) en het aantal cilinders dat de motor bevat (cyl). In elk geval wordt ervan uitgegaan dat de relatie tussen mpg en elk van onze functies lineair is.

Test- en trainingsgegevenssets genereren

Gebruik een verdeling van 70% voor training en 30% voor het testen van het model. Spelen met deze verhouding resulteert in verschillende modellen.

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

Het model trainen

Train het Logistic Regression-model.

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

fit

Gebruik nu summary() om meer te weten te komen over de kwaliteit van ons model en de statistische significantie van elk van onze voorspellingsfactoren.

summary(fit)

Het model gebruiken

U kunt het model toepassen op de testgegevensset door ml_predict()aan te roepen.

pred <- ml_predict(fit, partitions$test)

head(pred)

Ga naar Reference - ML- voor een lijst met Spark ML-modellen die beschikbaar zijn via sparklyr

Verbinding met Spark-cluster verbreken

U kunt naar spark_disconnect() bellen of de knop Sessie stoppen op het notitiebloklint selecteren om uw Spark-sessie te beƫindigen.

spark_disconnect(sc)

Meer informatie over de R-functionaliteiten: