Vue d’ensemble de SparkR

SparkR est un package R qui fournit un serveur frontal léger pour utiliser Apache Spark à partir de R. SparkR prend également en charge le Machine Learning distribué à l’aide de MLlib.

Informations de référence sur les fonctions SparkR

Vous trouverez la dernière référence de fonction SparkR sur spark.apache.org.

Vous pouvez également afficher l’aide sur les fonctions dans les blocs-notes R ou RStudio après avoir importé le package SparkR.

Documentation R incorporée

SparkR dans les notebooks

  • Pour Spark 2.0 et versions ultérieures, vous n’avez pas besoin de passer explicitement un objet sqlContext à chaque appel de fonction.
  • Pour Spark 2.2 et versions ultérieures, les notebooks n’importent plus SparkR par défaut, car les fonctions SparkR sont en conflit avec des fonctions portant le même nom dans d’autres packages populaires. Pour utiliser SparkR, vous pouvez appeler library(SparkR) dans vos notebooks. La session SparkR est déjà configurée, et toutes les fonctions SparkR communiquent avec votre cluster attaché à l’aide de la session existante.

SparkR dans les travaux spark-submit

Vous pouvez exécuter des scripts qui utilisent SparkR sur Azure Databricks en tant que travaux spark-submit, avec des modifications de code mineures.

Créer des DataFrames SparkR

Vous pouvez créer un DataFrame à partir d’un data.frame R local, d’une source de données ou à l’aide d’une requête Spark SQL.

À partir d’un data.frame R local

La méthode la plus simple pour créer un DataFrame consiste à convertir un data.frame R local en SparkDataFrame. Plus particulièrement, nous pouvons utiliser createDataFrame et passer dans le data.frame R local pour créer un SparkDataFrame. Comme la plupart des autres fonctions SparkR, la syntaxe createDataFrame a changé dans Spark 2.0. Vous pouvez en voir des exemples dans l’extrait de code ci-dessous. Pour plus d’exemples, consultez createDataFrame.

library(SparkR)
df <- createDataFrame(faithful)

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

Utilisation de l’API de source de données

La méthode générale pour créer un DataFrame à partir d’une source de données est read.df. Cette méthode prend le chemin d’accès du fichier à charger et le type de source de données. SparkR prend en charge la lecture des fichiers CSV, JSON, texte et Parquet en mode natif.

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

SparkR déduit automatiquement le schéma à partir du fichier CSV.

Ajout d’un connecteur de source de données avec des packages Spark

Grâce aux packages Spark, vous trouverez des connecteurs de source de données pour des formats de fichiers populaires tels que Avro. Par exemple, utilisez le package spark-avro pour charger un fichier Avro. La disponibilité du package spark-avro dépend de la version de votre cluster. Consultez le fichier Avro.

Prenez d’abord un data.frame existant, convertissez-le en DataFrame Spark, puis enregistrez-le sous un fichier Avro.

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

Pour vérifier qu’un fichier Avro a été enregistré :

%fs ls /tmp/iris.avro

Réutilisez maintenant le package spark-avro pour lire les données.

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

L’API de source de données peut également être utilisée pour enregistrer des DataFrames dans plusieurs formats de fichiers. Par exemple, vous pouvez enregistrer le DataFrame de l’exemple précédent dans un fichier Parquet à l’aide de write.df.

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

À partir d’une requête SQL Spark

Vous pouvez également créer des trames de données SparkR à l’aide de requêtes 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 est un SparkDataFrame.

Opérations de Tramedonnées

Les DataFrames Spark prennent en charge un certain nombre de fonctions pour le traitement de données structurées. En voici quelques exemples de base. La liste complète est disponible dans les documents de l’API.

Sélectionner des lignes et des colonnes

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

Regroupement et agrégation

Les DataFrames Spark prennent en charge un certain nombre de fonctions couramment utilisées pour agréger des données après le regroupement. Par exemple, vous pouvez compter le nombre de fois où chaque temps d’attente s’affiche dans le jeu de données fidèle.

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

Opérations sur les colonnes

SparkR fournit un certain nombre de fonctions qui peuvent être appliquées directement aux colonnes pour le traitement et l’agrégation de données. L’exemple suivant illustre l’utilisation de fonctions arithmétiques de 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)

Machine Learning

SparkR expose la plupart des algorithmes MLLib. En coulisse, SparkR utilise MLlib pour former le modèle.

L’exemple suivant montre comment générer un modèle GLM gaussien à l’aide de SparkR. Pour exécuter une régression linéaire, définissez la famille sur "gaussian". Pour exécuter une régression logistique, définissez la famille sur "binomial". Lorsque vous utilisez SparkML GLM, SparkR effectue automatiquement un encodage à chaud des fonctionnalités catégoriques afin qu’il ne soit pas nécessaire de le faire manuellement. En plus des fonctionnalités de type chaîne et double, il est également possible d’ajuster les fonctionnalités de vecteur MLlib à des fins de compatibilité avec d’autres composants 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)

Pour obtenir les tutoriels, consultez Tutoriel : Analyser des données avec glm.

Pour obtenir d’autres exemples, consultez Travailler avec des DataFrames et des tables dans R.