sparklyr verwenden

sparklyr ist eine R-Schnittstelle zu Apache Spark. Sie stellt einen Mechanismus für die Interaktion mit Spark mithilfe vertrauter R-Schnittstellen bereit. Sie können sparklyr über Spark-Batchauftragsdefinitionen oder mit interaktiven Microsoft Fabric-Notebooks verwenden.

sparklyr wird zusammen mit anderen tidyverse-Paketen wie z. B. dplyr verwendet. Microsoft Fabric verteilt die neuesten stabilen Versionen von sparklyr und tidyverse mit jedem Runtimerelease. Sie können sie importieren und die API verwenden.

Voraussetzungen

  • Öffnen oder erstellen Sie ein Notebook. Informationen dazu finden Sie unter Verwenden von Microsoft Fabric-Notebooks.

  • Legen Sie zum Ändern der primären Sprache die Sprachoption auf SparkR (R) fest.

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

Verbinden von sparklyr mit einem Synapse Spark-Cluster

Verwenden Sie die folgende Verbindungsmethode in spark_connect(), um eine sparklyr-Verbindung herzustellen. Wir unterstützen eine neue Verbindungsmethode namens synapse, die Ihnen die Herstellung einer Verbindung mit einer vorhandenen Spark-Sitzung ermöglicht. Dadurch wird die Startzeit der sparklyr-Sitzung erheblich reduziert. Darüber hinaus haben wir diese Verbindungsmethode zum Open Sourced Sparklyr-Projekt beigetragen. 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, entweder Daten in den Arbeitsspeicher Ihrer Spark-Sitzung zu laden oder Spark auf den Speicherort der Daten zu verweisen, damit es 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.

Den ABFS-Pfad finden Sie, indem Sie mit der rechten Maustaste auf den Ordner Dateien in Ihrem Lakehouse klicken und dann ABFS-Pfad auswählen. Ersetzen Sie abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files in diesem Code durch den Pfad:

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 bekannte dplyr-Befehle verwenden, um Daten in Spark vorzubereiten. Die Befehle werden in Spark ausgeführt, sodass es keine unnötigen Datenübertragungen zwischen R und Spark gibt.

Unter Manipulating Data with dplyr (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. Verwenden Sie show_query(), um die resultierende Abfrage anzuzeigen:

# 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 in einem R-Dataframe 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 oben beschriebenen Methoden verwenden SQL-Anweisungen. Spark stellt Befehle bereit, die einen Teil der Datentransformation bequemer machen, und zwar ohne die Verwendung von SQL.

Beispielsweise vereinfacht der Befehl ft_binarizer() die Erstellung einer neuen Spalte, die angibt, ob der Wert einer anderen Spalte oberhalb eines bestimmten Schwellenwerts liegt.

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

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

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

Machine Learning

Hier sehen Sie ein Beispiel, in dem wir ml_linear_regression() zum Anpassen eines Modells für die lineare Regression verwenden. Wir verwenden das integrierte Dataset mtcars und wollen herausfinden, ob wir den Kraftstoffverbrauch eines Fahrzeugs (mpg) basierend auf dem Fahrzeuggewicht (wt) und der Anzahl der Zylinder (cyl) vorhersagen können. In beiden Fällen nehmen wir an, dass die Beziehung zwischen mpg und dem jeweiligen Feature linear ist.

Generieren von Test- und Trainingsdatensätzen

Verwenden Sie eine Aufteilung: 70 % für das Training und 30 % für das Testen des Modells. Die Verwendung unterschiedlicher Verhältnisse 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 Modell für die logistische Regression.

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

fit

Verwenden Sie jetzt summary() , um sich über die Qualität unseres Modells und die statistische Bedeutung jedes Prädiktors zu informieren.

summary(fit)

Verwenden des Modells

Sie können das Modell auf das Testdataset anwenden, indem Sie ml_predict() aufrufen.

pred <- ml_predict(fit, partitions$test)

head(pred)

Eine Liste der über sparklyr verfügbaren Spark ML-Modelle finden Sie unter Reference – ML (Referenz zu 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: