Freigeben über


Verwenden von Sparklyr

sparklyr ist eine R-Schnittstelle zu Apache Spark. Es bietet einen Mechanismus für die Interaktion mit Spark mithilfe vertrauter R-Schnittstellen. Sie können Sparklyr über Spark-Batch-Job-Definitionen oder mit interaktiven Microsoft Fabric-Notizbüchern verwenden.

sparklyr wird zusammen mit anderen Tidyverse--Paketen wie dplyrverwendet. Microsoft Fabric verteilt die neuesten stabilen Versionen von sparklyr und tidyverse mit jedem Runtimerelease. Sie können sie importieren und mit der Verwendung der API beginnen.

Voraussetzungen

  • Öffnen oder Erstellen eines Notizbuchs Informationen dazu finden Sie unter Verwenden von Microsoft Fabric-Notizbüchern.

  • Legen Sie die Sprachoption auf SparkR (R)- fest, um die primäre Sprache zu ändern.

  • Fügen Sie Ihr Notizbuch an ein Seehaus an. Wählen Sie auf der linken Seite Hinzufügen aus, um ein vorhandenes Seehaus hinzuzufügen oder ein Seehaus zu erstellen.

Verbinden von Sparklyr mit Synapse Spark-Cluster

Verwenden Sie die folgende Verbindungsmethode in spark_connect(), um eine sparklyr Verbindung herzustellen. Wir unterstützen eine neue Verbindungsmethode namens synapse, mit der Sie eine Verbindung mit einer vorhandenen Spark-Sitzung herstellen können. Dadurch wird die Startzeit der sparklyr Sitzung erheblich reduziert. Darüber hinaus haben wir diese Verbindungsmethode zum Open Sourced Sparklyr-Projektbeigetragen. Mit method = "synapse" können Sie sowohl sparklyr als auch SparkR in derselben Sitzung verwenden und problemlos Daten zwischen ihnen freigeben.

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

Verwenden von Sparklyr zum Lesen von Daten

Eine neue Spark-Sitzung enthält keine Daten. Der erste Schritt besteht darin, Daten entweder in den Speicher Ihrer Spark-Sitzung zu laden oder Spark auf den Speicherort der Daten zu verweisen, damit sie bei Bedarf auf die Daten zugreifen kann.

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

Mithilfe von sparklyr können Sie auch write- und read-Vorgänge für Daten aus einer Lakehouse-Datei über einen ABFS-Pfad ausführen. Um in einem Lakehouse zu lesen und zu schreiben, fügen Sie das Lakehouse zuerst zu Ihrer Sitzung hinzu. Wählen Sie auf der linken Seite des Notebooks die Option Hinzufügen aus, um ein vorhandenes Lakehouse hinzuzufügen oder ein neues zu erstellen.

Um Ihren ABFS-Pfad zu finden, klicken Sie mit der rechten Maustaste auf den Ordner Dateien in Ihrem Lakehouse, und wählen Sie dann ABFS-Pfad kopierenaus. Fügen Sie Ihren Pfad ein, um abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files in diesem Code zu ersetzen:

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)

Verwenden von Sparklyr zum Bearbeiten von Daten

sparklyr bietet mehrere Methoden zum Verarbeiten von Daten in Spark mithilfe von:

  • dplyr-Befehle
  • SparkSQL
  • Featuretransformatoren von Spark

Verwenden Sie dplyr

Sie können vertraute dplyr Befehle verwenden, um Daten in Spark vorzubereiten. Die Befehle werden in Spark ausgeführt, daher gibt es keine unnötigen Datenübertragungen zwischen R und Spark.

Unter Bearbeiten von Daten mit dplyr finden Sie weitere Informationen zur Verwendung von dplyr mit 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 und dplyr übersetzen die R-Befehle für uns in Spark SQL. Um die Ergebnisabfrage anzuzeigen, verwenden Sie show_query():

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

Verwenden von SQL

Es ist auch möglich, SQL-Abfragen direkt für Tabellen in einem Spark-Cluster auszuführen. Das spark_connection() -Objekt implementiert eine DBI--Schnittstelle für Spark, sodass Sie dbGetQuery() verwenden können, um SQL auszuführen und das Ergebnis als R-Datenrahmen zurückzugeben:

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

Verwenden von Featuretransformatoren

Beide vorherigen Methoden basieren auf SQL-Anweisungen. Spark stellt Befehle bereit, mit denen einige Datentransformationen bequemer und ohne die Verwendung von SQL sind.

Beispielsweise vereinfacht der Befehl ft_binarizer() die Erstellung einer neuen Spalte, die angibt, ob der Wert einer anderen Spalte über einem bestimmten Schwellenwert liegt.

Die vollständige Liste der Spark-Featuretransformatoren, die über sparklyr verfügbar sind, finden Sie unter Referenz zu FT.

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

Freigeben von Daten zwischen sparklyr und SparkR

Wenn Sie eine Verbindung sparklyr mit Synapse Spark Cluster mit method = "synapse" herstellen, können Sie sowohl sparklyr als auch SparkR in derselben Sitzung verwenden und Daten problemlos freigeben. Sie können in sparklyr eine Spark-Tabelle erstellen und diese aus SparkR lesen.

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

Maschinelles Lernen

Hier ist ein Beispiel, in dem wir ml_linear_regression() verwenden, um ein lineares Regressionsmodell anzupassen. Wir verwenden das integrierte mtcars-Dataset und sehen, ob wir den Kraftstoffverbrauch eines Autos (mpg) basierend auf seinem Gewicht (wt) vorhersagen können und die Anzahl der Zylinder, die der Motor enthält (cyl). Wir gehen in jedem Fall davon aus, dass die Beziehung zwischen mpg und jedem unserer Features linear ist.

Generieren von Test- und Schulungsdatensätzen

Verwenden Sie eine Aufteilung: 70% für das Training und 30% für das Testen des Modells. Das Experimentieren mit diesem Verhältnis führt zu unterschiedlichen 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)

Trainieren des Modells

Trainieren Sie das Logistische Regressionsmodell.

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

fit

Verwenden Sie nun summary() , um etwas mehr über die Qualität unseres Modells und die statistische Bedeutung jeder unserer Prädiktoren zu erfahren.

summary(fit)

Modell verwenden

Sie können das Modell auf das Test-Dataset anwenden, indem Sie ml_predict()aufrufen.

pred <- ml_predict(fit, partitions$test)

head(pred)

Eine Liste der Spark ML-Modelle, die über Sparklyr verfügbar sind, finden Sie unter Reference - ML

Trennen des Spark-Clusters

Sie können spark_disconnect() aufrufen oder die Schaltfläche Sitzung beenden über dem Notebook-Menüband auswählen, um die Spark-Sitzung zu beenden.

spark_disconnect(sc)

Weitere Informationen zu den R-Funktionen: