SparkR: Übersicht

SparkR ist ein R-Paket, das ein schlankes Front-End für die Nutzung von Apache Spark in R bereitstellt. SparkR unterstützt auch verteiltes maschinelles Lernen mithilfe von MLlib.

SparkR: Funktionsreferenz

Die aktuelle SparkR-Funktionsreferenz finden Sie auf spark.apache.org.

Sie können auch die Funktionshilfe in R-Notebooks oder RStudio anzeigen, nachdem Sie das SparkR-Paket importiert haben.

Dokumentation zu Embedded R

SparkR in Notebooks

  • Ab Spark 2.0 müssen Sie nicht bei jedem Funktionsaufruf explizit ein sqlContext-Objekt übergeben.
  • Ab Spark 2.2 importieren Notebooks standardmäßig nicht mehr SparkR, da SparkR-Funktionen mit ähnlich benannten Funktionen aus anderen beliebten Paketen in Konflikt geraten sind. Um SparkR zu verwenden, können Sie in Ihren Notebooks library(SparkR) aufrufen. Die SparkR-Sitzung ist bereits konfiguriert, und alle SparkR-Funktionen kommunizieren mit Ihrem angefügten Cluster in der bestehenden Sitzung.

SparkR in spark-submit-Aufträgen

Sie können Skripts, die SparkR in Azure Databricks verwenden, mit geringfügigen Änderungen am Code als spark-submit-Aufträge ausführen.

Erstellen von SparkR-DataFrames

Sie können einen DataFrame aus einem lokalen data.frame in R, aus einer Datenquelle oder mithilfe einer Spark-SQL-Abfrage erstellen.

Aus einem lokalen data.frame in R

Die einfachste Möglichkeit zum Erstellen eines DataFrames besteht in der Konvertierung eines lokalen data.frame in R in einen SparkDataFrame. Konkret können wir createDataFrame verwenden und das lokale data.frame in R übergeben, um einen SparkDataFrame zu erstellen. Wie die meisten anderen SparkR-Funktionen wurde auch die createDataFrame-Syntax in Spark 2.0 geändert. Beispiele hierfür finden Sie im folgenden Codeschnipsel. Weitere Beispiele finden Sie unter createDataFrame.

library(SparkR)
df <- createDataFrame(faithful)

# Displays the content of the DataFrame to stdout
head(df)

Verwenden der Datenquellen-API

Die allgemeine Methode zum Erstellen eines DataFrames aus einer Datenquelle ist read.df. Diese Methode verwendet den Pfad der zu ladenden Datei und den Typ der Datenquelle. SparkR unterstützt nativ das Lesen von CSV-, JSON-, Text- und Parquet-Dateien.

library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)

SparkR leitet das Schema automatisch aus der CSV-Datei ab.

Hinzufügen eines Datenquellenconnectors mit Spark-Paketen

Über Spark-Pakete können Sie Datenquellenconnectors für gängige Dateiformate wie Avro finden. Verwenden Sie zum Beispiel das Paket spark-avro, um eine Avro-Datei zu laden. Die Verfügbarkeit des spark-avro-Pakets hängt von der Version Ihres Clusters ab. Weitere Informationen finden Sie unter Avro-Datei.

Verwenden Sie zunächst einen vorhandenen data.frame, konvertieren Sie ihn in einen Spark-DataFrame, und speichern Sie ihn als Avro-Datei.

require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")

So überprüfen Sie, ob eine Avro-Datei gespeichert wurde

%fs ls /tmp/iris.avro

Verwenden Sie nun erneut das spark-avro-Paket, um die Daten zurücklesen zu können.

irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)

Die Datenquellen-API kann auch verwendet werden, um DataFrames in mehreren Dateiformaten zu speichern. Beispielsweise können Sie den DataFrame im vorherigen Beispiel mit write.df in einer Parquet-Datei speichern.

write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet

Über eine Spark-SQL-Abfrage

Sie können SparkR-DataFrames auch mithilfe von Spark-SQL-Abfragen erstellen.

# Register earlier df as temp view
createOrReplaceTempView(irisDF2, "irisTemp")
# Create a df consisting of only the 'species' column using a Spark SQL query
species <- sql("SELECT species FROM irisTemp")

species ist ein Spark-DataFrame.

DataFrame-Vorgänge

Spark-DataFrames unterstützen eine Reihe von Funktionen für die strukturierte Datenverarbeitung. Es folgen einige einfache Beispiele. Eine vollständige Liste finden Sie in der API-Dokumentation.

Auswählen von Zeilen und Spalten

# Import SparkR package if this is a new notebook
require(SparkR)

# Create DataFrame
df <- createDataFrame(faithful)
# Select only the "eruptions" column
head(select(df, df$eruptions))
# You can also pass in column name as strings
head(select(df, "eruptions"))
# Filter the DataFrame to only retain rows with wait times shorter than 50 mins
head(filter(df, df$waiting < 50))

Gruppierung und Aggregation

Spark-DataFrames unterstützen eine Reihe gängiger Funktionen zum Aggregieren von Daten nach ihrer Gruppierung. Sie können z. B. zählen, wie oft jede Wartezeit im Dataset „Faithful“ vorkommt.

head(count(groupBy(df, df$waiting)))
# You can also sort the output from the aggregation to get the most common waiting times
waiting_counts <- count(groupBy(df, df$waiting))
head(arrange(waiting_counts, desc(waiting_counts$count)))

Spaltenvorgänge

SparkR bietet eine Reihe von Funktionen zur Datenverarbeitung und -aggregation, die direkt auf Spalten angewendet werden können. Das folgende Beispiel zeigt die Verwendung grundlegender arithmetischer Funktionen.

# Convert waiting time from hours to seconds.
# You can assign this to a new column in the same DataFrame
df$waiting_secs <- df$waiting * 60
head(df)

Maschinelles Lernen

SparkR macht die meisten MLLib-Algorithmen verfügbar. Im Hintergrund verwendet SparkR die MLlib, um das Modell zu trainieren.

Das folgende Beispiel zeigt, wie Sie mit SparkR ein gaußsches generalisiertes lineares Modell (GLM) erstellen. Legen Sie zum Ausführen einer linearen Regression „family“ auf "gaussian" fest. Legen Sie zum Ausführen einer logistischen Regression „family“ auf "binomial" fest. Bei Verwendung von SparkML GLM führt SparkR automatisch eine One-Hot-Codierung kategorischer Features durch, sodass diese nicht manuell erfolgen muss. Neben den Typfeatures „String“ und „Double“ ist es auch möglich, MLlib Vector-Features einzupassen, um die Kompatibilität mit anderen MLlib-Komponenten zu gewährleisten.

# Create the DataFrame
df <- createDataFrame(iris)

# Fit a linear model over the dataset.
model <- glm(Sepal_Length ~ Sepal_Width + Species, data = df, family = "gaussian")

# Model coefficients are returned in a similar format to R's native glm().
summary(model)

Tutorials finden Sie unter Tutorial: Analysieren von Daten mit glm.

Weitere Beispiele finden Sie unter Arbeiten mit DataFrames und Tabellen in R.