Panoramica di SparkR
SparkR è un pacchetto R che fornisce un front-end leggero per l'uso di Apache Spark da R. SparkR supporta anche l'apprendimento automatico distribuito con MLlib.
Informazioni di riferimento sulle funzioni di SparkR
Per informazioni di riferimento sulle funzioni SparkR più recenti, vedere spark.apache.org.
È anche possibile visualizzare la Guida per le funzioni nei notebook R o RStudio dopo l'importazione del pacchetto SparkR.
SparkR nei notebook
- Per Spark 2.0 e versioni successive, non è necessario passare in modo esplicito un
sqlContext
oggetto a ogni chiamata di funzione. - Per Spark 2.2 e versioni successive, i notebook non importano più SparkR per impostazione predefinita perché le funzioni SparkR sono in conflitto con funzioni denominate in modo analogo da altri pacchetti più diffusi. Per usare SparkR, è possibile chiamare
library(SparkR)
nei notebook. La sessione SparkR è già configurata e tutte le funzioni SparkR comunicano con il cluster collegato usando la sessione esistente.
SparkR nei processi spark-submit
È possibile eseguire script che usano SparkR in Azure Databricks come processi di invio spark, con modifiche minime al codice.
Creare dataframe SparkR
È possibile creare un dataframe da un R data.frame
locale, da un'origine dati o usando una query Spark SQL.
Da un R locale data.frame
Il modo più semplice per creare un dataframe consiste nel convertire un R data.frame
locale in un oggetto SparkDataFrame
. In particolare, è possibile usare createDataFrame
e passare il R data.frame
locale per creare un oggetto SparkDataFrame
. Analogamente alla maggior parte delle altre funzioni SparkR, createDataFrame
la sintassi è cambiata in Spark 2.0. È possibile visualizzare esempi di questo nel frammento di codice seguente.
Per altri esempi, vedere createDataFrame.
library(SparkR)
df <- createDataFrame(faithful)
# Displays the content of the DataFrame to stdout
head(df)
Uso dell'API dell'origine dati
Il metodo generale per la creazione di un DataFrame da un'origine dati è read.df
.
Questo metodo accetta il percorso del file da caricare e il tipo di origine dati.
SparkR supporta la lettura di file CSV, JSON, testo e Parquet in modo nativo.
library(SparkR)
diamondsDF <- read.df("/databricks-datasets/Rdatasets/data-001/csv/ggplot2/diamonds.csv", source = "csv", header="true", inferSchema = "true")
head(diamondsDF)
SparkR deduce automaticamente lo schema dal file CSV.
Aggiunta di un connettore di origine dati con pacchetti Spark
Tramite i pacchetti Spark è possibile trovare connettori di origine dati per formati di file comuni, ad esempio Avro. Ad esempio, usare il pacchetto spark-avro per caricare un file Avro. La disponibilità del pacchetto spark-avro dipende dalla versione del cluster. Vedere Il file Avro.
Prima di tutto, convertire un data.frame
dataframe Spark in un dataframe Spark e salvarlo come file Avro.
require(SparkR)
irisDF <- createDataFrame(iris)
write.df(irisDF, source = "com.databricks.spark.avro", path = "dbfs:/tmp/iris.avro", mode = "overwrite")
Per verificare che sia stato salvato un file Avro:
%fs ls /tmp/iris.avro
Usare ora di nuovo il pacchetto spark-avro per leggere i dati.
irisDF2 <- read.df(path = "/tmp/iris.avro", source = "com.databricks.spark.avro")
head(irisDF2)
L'API dell'origine dati può essere usata anche per salvare i dataframe in più formati di file. Ad esempio, è possibile salvare il dataframe dall'esempio precedente in un file Parquet usando write.df
.
write.df(irisDF2, path="dbfs:/tmp/iris.parquet", source="parquet", mode="overwrite")
%fs ls dbfs:/tmp/iris.parquet
Da una query Spark SQL
È anche possibile creare DataFrame SparkR usando query Spark SQL.
# 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
è un SparkDataFrame.
Operazioni dei DataFrame
I dataframe Spark supportano una serie di funzioni per eseguire l'elaborazione dei dati strutturata. Ecco alcuni esempi di base. Un elenco completo è disponibile nella documentazione dell'API.
Selezionare righe e colonne
# 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))
Raggruppamento e aggregazioni
SparkDataFrames supporta una serie di funzioni di uso comune per aggregare i dati dopo il raggruppamento. Ad esempio, è possibile contare il numero di volte in cui ogni tempo di attesa viene visualizzato nel set di dati fedele.
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)))
Operazioni su colonne
SparkR offre una serie di funzioni che possono essere applicate direttamente alle colonne per l'elaborazione e l'aggregazione dei dati. L'esempio seguente mostra come usare le funzioni aritmetiche di base.
# 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)
Apprendimento automatico
SparkR espone la maggior parte degli algoritmi MLLib. SparkR usa MLlib per eseguire il training del modello.
L'esempio seguente illustra come creare un modello GLM gaussian usando SparkR. Per eseguire la regressione lineare, impostare la famiglia su "gaussian"
. Per eseguire la regressione logistica, impostare la famiglia su "binomial"
. Quando si usa SparkML GLM SparkR esegue automaticamente la codifica one-hot delle funzionalità categoriche in modo che non sia necessario eseguire manualmente.
Oltre alle funzionalità di tipo String e Double, è anche possibile adattarsi alle funzionalità MLlib Vector, per compatibilità con altri componenti MLlib.
# 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)
Per le esercitazioni, vedere Esercitazione: Analizzare i dati con glm.