Share via


Översikt över SparkR

SparkR är ett R-paket som tillhandahåller en lättviktsklientdel för att använda Apache Spark från R. SparkR stöder även distribuerad maskininlärning med hjälp av MLlib.

Funktionsreferens för SparkR

Du hittar den senaste SparkR-funktionsreferensen på spark.apache.org.

Du kan också visa funktionshjälp i R-notebook-filer eller RStudio när du har importerat SparkR-paketet.

Inbäddad R-dokumentation

SparkR i notebook-filer

  • För Spark 2.0 och senare behöver du inte uttryckligen skicka ett sqlContext objekt till varje funktionsanrop.
  • För Spark 2.2 och senare importerar notebook-filer inte längre SparkR som standard eftersom SparkR-funktioner stod i konflikt med liknande namngivna funktioner från andra populära paket. Om du vill använda SparkR kan du anropa library(SparkR) i dina notebook-filer. SparkR-sessionen är redan konfigurerad och alla SparkR-funktioner kommunicerar med ditt anslutna kluster med den befintliga sessionen.

SparkR i spark-submit-jobb

Du kan köra skript som använder SparkR på Azure Databricks som spark-submit-jobb med mindre kodändringar.

Skapa SparkR DataFrames

Du kan skapa en DataFrame från en lokal R data.frame, från en datakälla eller med hjälp av en Spark SQL-fråga.

Från en lokal R data.frame

Det enklaste sättet att skapa en DataFrame är att konvertera en lokal R data.frame till en SparkDataFrame. Mer specifikt kan vi använda createDataFrame och skicka in den lokala R data.frame :en för att skapa en SparkDataFrame. Precis som de flesta andra SparkR-funktioner createDataFrame har syntaxen ändrats i Spark 2.0. Du kan se exempel på detta i kodfragmentet nedan. Fler exempel finns i createDataFrame.

library(SparkR)
df <- createDataFrame(faithful)

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

Använda API:et för datakälla

Den allmänna metoden för att skapa en DataFrame från en datakälla är read.df. Den här metoden använder sökvägen för att filen ska läsas in och typen av datakälla. SparkR stöder läsning av CSV-, JSON-, text- och Parquet-filer internt.

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

SparkR härleder automatiskt schemat från CSV-filen.

Lägga till en anslutningsapp för datakälla med Spark Packages

Via Spark Packages hittar du anslutningsappar för datakällor för populära filformat som Avro. Använd till exempel spark-avro-paketet för att läsa in en Avro-fil . Tillgängligheten för Spark-avro-paketet beror på klustrets version. Se Avro-filen.

Ta först en befintlig data.frame, konvertera till en Spark DataFrame och spara den som en Avro-fil.

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

Så här kontrollerar du att en Avro-fil har sparats:

%fs ls /tmp/iris.avro

Använd nu spark-avro-paketet igen för att läsa tillbaka data.

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

Datakällans API kan också användas för att spara DataFrames i flera filformat. Du kan till exempel spara DataFrame från föregående exempel till en Parquet-fil med .write.df

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

Från en Spark SQL-fråga

Du kan också skapa SparkR DataFrames med hjälp av Spark SQL-frågor.

# 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 är en SparkDataFrame.

DataFrame-åtgärder

Spark DataFrames stöder ett antal funktioner för strukturerad databearbetning. Här följer några grundläggande exempel. En fullständig lista finns i API-dokumenten.

Markera rader och kolumner

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

Gruppering och sammansättning

SparkDataFrames stöder ett antal vanliga funktioner för att aggregera data efter gruppering. Du kan till exempel räkna antalet gånger varje väntetid som visas i den trofasta datauppsättningen.

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

Kolumnåtgärder

SparkR innehåller ett antal funktioner som kan tillämpas direkt på kolumner för databearbetning och aggregering. I följande exempel visas användningen av grundläggande aritmetiska funktioner.

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

Maskininlärning

SparkR exponerar de flesta MLLib-algoritmer. Under huven använder SparkR MLlib för att träna modellen.

I följande exempel visas hur du skapar en gaussisk GLM-modell med hjälp av SparkR. Om du vill köra linjär regression anger du familj till "gaussian". Om du vill köra logistisk regression anger du familj till "binomial". När du använder SparkML GLM SparkR utför automatiskt en frekvent kodning av kategoriska funktioner så att det inte behöver göras manuellt. Utöver funktioner av sträng- och dubbeltyp är det också möjligt att passa över MLlib Vector-funktioner för kompatibilitet med andra MLlib-komponenter.

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

Självstudier finns i Självstudie: Analysera data med glm.

Ytterligare exempel finns i Arbeta med dataramar och tabeller i R.