Descrição geral do SparkR

SparkR é um pacote R que fornece um frontend leve para usar Apache Spark de R. SparkR também suporta machine learning distribuído usando MLlib.

SparkR em cadernos

  • Para Spark 2.0 ou superior, não precisa de passar explicitamente um sqlContext objeto a todas as chamadas de função. Este artigo usa a nova sintaxe. Para exemplos de sintaxe antigas, consulte a visão geral do SparkR 1.6.
  • Para a Spark 2.2 ou superior, os cadernos deixaram de importar o SparkR por defeito, uma vez que as funções sparkr estavam em conflito com funções similarmente nomeadas de outros pacotes populares. Para usar o SparkR pode ligar library(SparkR) para os seus cadernos. A sessão SparkR já está configurada e todas as funções sparkR falarão com o seu cluster anexado utilizando a sessão existente.

SparkR em empregos de apresentação de faíscas

Pode executar scripts que usam o SparkR em Azure Databricks como trabalhos de apresentação de faíscas, com pequenas modificações de código. Por exemplo, consulte criar e executar um trabalho de apresentação de faíscas para scripts R.

Criar DataFrames sparkr

Pode criar um DataFrame a partir de um R data.frame local, a partir de uma fonte de dados, ou utilizando uma consulta Spark SQL.

De um R local data.frame

A forma mais simples de criar um DataFrame é converter um R local data.frame em a SparkDataFrame . Especificamente, podemos usar createDataFrame e passar no R local para criar um data.frame SparkDataFrame . Como a maioria das outras funções do SparkR, createDataFrame a sintaxe mudou na Faísca 2.0. Pode ver exemplos disso no código do fole. Consulte para criar oDataFrame para mais exemplos.

library(SparkR)
df <- createDataFrame(faithful)

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

Utilização da fonte de dados API

O método geral para criar um DataFrame a partir de uma fonte de dados é read.df . Este método toma o caminho para que o ficheiro carregue e o tipo de fonte de dados. O SparkR suporta a leitura de ficheiros CSV, JSON, texto e Parquet de forma nativa.

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

O SparkR infere automaticamente o esquema do ficheiro CSV.

Adicionar um conector de fonte de dados com pacotes de faíscas

Através de Pacotes Spark pode encontrar conectores de fonte de dados para formatos de ficheiros populares, como o Avro. Como exemplo, utilize o pacote spark-avro para carregar um ficheiro Avro. A disponibilidade do pacote spark-avro depende da versãode imagem do seu cluster . Consulte o ficheiro Avro.

Primeiro, tome um data.frame existente, converta-se num DataFrame de faísca, e guarde-o como um ficheiro Avro.

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

Para verificar se um ficheiro Avro foi guardado:

%fs ls /tmp/iris

Agora use novamente o pacote spark-avro para ler os dados.

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

A API de origem de dados também pode ser usada para guardar DataFrames em vários formatos de ficheiros. Por exemplo, pode guardar o DataFrame do exemplo anterior para um ficheiro Parquet que utiliza write.df .

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

De uma consulta Spark SQL

Também pode criar DataFrames SparkR usando consultas Spark SQL.

# Register earlier df as temp view
createOrReplaceTempView(people, "peopleTemp")
# Create a df consisting of only the 'age' column using a Spark SQL query
age <- sql("SELECT age FROM peopleTemp")

age é um SparkDataFrame.

Operações DataFrame

Os DataFrames de Faísca suportam uma série de funções para fazer o processamento de dados estruturado. Aqui estão alguns exemplos básicos. Uma lista completa pode ser encontrada nos docs da API.

Selecione linhas e colunas

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

Agrupamento e agregação

O SparkDataFrames suporta uma série de funções comumente utilizadas para agregar dados após o agrupamento. Por exemplo, pode contar o número de vezes que cada tempo de espera aparece no conjunto de dados fiel.

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

Operações de coluna

O SparkR fornece uma série de funções que podem ser diretamente aplicadas às colunas para processamento e agregação de dados. O exemplo a seguir mostra a utilização de funções aritméticas básicas.

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

Aprendizagem automática

SparkR expõe a maioria dos algoritmos MLLib. Sob o capot, SparkR usa MLlib para treinar o modelo.

O exemplo a seguir mostra como construir um modelo glm gaussiano usando o SparkR. Para executar a regressão linear, coloque a família em "gaussian" . Para executar a regressão logística, coloque a família em "binomial" . Ao utilizar o SparkML GLM SparkR, executa automaticamente uma codificação de características categóricas de modo a que não seja necessário fazê-lo manualmente. Além das funcionalidades do tipo String e Double, também é possível encaixar sobre as características do Vetor MLlib, para compatibilidade com outros componentes 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)

Para tutoriais, consulte os tutoriais do SparkR ML.