Overzicht van SparkR
SparkR is een R-pakket dat een lichtgewicht front-end biedt voor het gebruik van Apache Spark van R. SparkR biedt ook ondersteuning voor gedistribueerde machine learning met behulp van MLlib.
SparkR-functieverwijzing
U vindt de meest recente referentie voor sparkR-functies op spark.apache.org.
U kunt ook functiehulp bekijken in R-notebooks of RStudio nadat u het SparkR-pakket hebt geïmporteerd.
SparkR in notebooks
- Voor Spark 2.0 en hoger hoeft u niet expliciet een
sqlContext
object door te geven aan elke functieoproep. - Voor Spark 2.2 en hoger importeren notebooks sparkR niet meer standaard omdat SparkR-functies conflicteerden met vergelijkbare benoemde functies uit andere populaire pakketten. Als u SparkR wilt gebruiken, kunt u uw notebooks aanroepen
library(SparkR)
. De SparkR-sessie is al geconfigureerd en alle SparkR-functies communiceren met uw gekoppelde cluster met behulp van de bestaande sessie.
SparkR in spark-submit-taken
U kunt scripts uitvoeren die SparkR in Azure Databricks gebruiken als spark-submit-taken, met kleine codewijzigingen.
SparkR DataFrames maken
U kunt een DataFrame maken op basis van een lokale R data.frame
, vanuit een gegevensbron of met behulp van een Spark SQL-query.
Vanaf een lokale R data.frame
De eenvoudigste manier om een DataFrame te maken is door een lokale R data.frame
te converteren naar een SparkDataFrame
. We kunnen met name de lokale R data.frame
gebruiken createDataFrame
en doorgeven om een SparkDataFrame
. Net als bij de meeste andere SparkR-functies is createDataFrame
de syntaxis gewijzigd in Spark 2.0. U kunt voorbeelden hiervan zien in het onderstaande codefragment.
Zie createDataFrame voor meer voorbeelden.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
De gegevensbron-API gebruiken
De algemene methode voor het maken van een DataFrame op basis van een gegevensbron is read.df
.
Met deze methode wordt het pad voor het bestand geladen en het type gegevensbron.
SparkR biedt ondersteuning voor het lezen van CSV-, JSON-, tekst- en Parquet-bestanden.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
SparkR bepaalt automatisch het schema uit het CSV-bestand.
Een gegevensbronconnector toevoegen met Spark-pakketten
Via Spark-pakketten vindt u connectors voor gegevensbronnen voor populaire bestandsindelingen zoals Avro. Gebruik bijvoorbeeld het spark-avro-pakket om een Avro-bestand te laden. De beschikbaarheid van het spark-avro-pakket is afhankelijk van de versie van uw cluster. Zie het Avro-bestand.
Neem eerst een bestaand data.frame
, converteer naar een Spark DataFrame en sla het op als een Avro-bestand.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Controleren of een Avro-bestand is opgeslagen:
%fs ls /tmp/iris.avro
Gebruik nu het spark-avro-pakket opnieuw om de gegevens te lezen.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
De gegevensbron-API kan ook worden gebruikt om DataFrames op te slaan in meerdere bestandsindelingen. U kunt bijvoorbeeld het DataFrame uit het vorige voorbeeld opslaan in een Parquet-bestand met behulp van write.df
.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Vanuit een Spark SQL-query
U kunt ook SparkR DataFrames maken met behulp van Spark SQL-query's.
# 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
is een SparkDataFrame.
DataFrame-bewerkingen
Spark DataFrames ondersteunen een aantal functies om gestructureerde gegevensverwerking uit te voeren. Hier volgen enkele basisvoorbeelden. Een volledige lijst vindt u in de API-documenten.
Rijen en kolommen selecteren
# 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))
Groepering en aggregatie
SparkDataFrames ondersteunen een aantal veelgebruikte functies voor het aggregeren van gegevens na groepering. U kunt bijvoorbeeld het aantal keren tellen dat elke wachttijd wordt weergegeven in de getrouwe gegevensset.
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)))
Kolombewerkingen
SparkR biedt een aantal functies die rechtstreeks kunnen worden toegepast op kolommen voor gegevensverwerking en aggregatie. In het volgende voorbeeld ziet u het gebruik van eenvoudige rekenkundige functies.
# 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)
Machine learning
SparkR maakt de meeste MLLib-algoritmen beschikbaar. SparkR gebruikt MLlib om het model te trainen.
In het volgende voorbeeld ziet u hoe u een gaussiaan GLM-model bouwt met behulp van SparkR. Als u lineaire regressie wilt uitvoeren, stelt u de familie in op "gaussian"
. Als u logistieke regressie wilt uitvoeren, stelt u familie in op "binomial"
. Wanneer u SparkML GLM SparkR gebruikt, wordt automatisch één dynamische codering van categorische functies uitgevoerd, zodat deze niet handmatig hoeft te worden uitgevoerd.
Naast tekenreeks- en dubbeltypefuncties is het ook mogelijk om te passen op MLlib Vector-functies, voor compatibiliteit met andere MLlib-onderdelen.
# 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)
Zie Zelfstudie: Gegevens analyseren met glm voor zelfstudies.
Zie Werken met DataFrames en tabellen in R voor meer voorbeelden.