Översikt över SparkR
Viktig
SparkR i Databricks är föråldrad i Databricks Runtime 16.0 och senare. Databricks rekommenderar att du använder sparklyr i stället.
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.
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.