Delen via


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.

Ingesloten R-documentatie

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.