Visão geral do SparkR

Importante

SparkR em Databricks está obsoleto em Databricks Runtime 16.0 e acima. Databricks recomenda o uso de Sparklyr em vez disso.

SparkR é um pacote R que fornece um front-end leve para usar Apache Spark de R. SparkR também oferece suporte a machine learning distribuído usando MLlib.

Referência da função SparkR

Você pode encontrar a referência de função SparkR mais recente em spark.apache.org.

Você também pode view a ajuda da função no R Notebook ou RStudio depois de importar o pacote SparkR.

Documentação R incorporada

SparkR no Notebook

  • Para Spark 2.0e acima, você não precisa passar explicitamente um objeto sqlContext para cada chamada de função.

  • Para o Spark 2.2e acima, Notebook não importa mais o SparkR por default porque as funções do SparkR estavam em conflito com funções com nomes semelhantes de outros pacotes populares. Para usar o SparkR, você pode chamar library(SparkR) em seu Notebook. A sessão do SparkR já está configurada e todas as funções do SparkR se comunicarão com seus clusters anexados usando a sessão existente.

SparkR no Jobde envio de faísca

Você pode executar scripts que usam SparkR em Databricks como Spark-submit Job, com pequenas modificações de código.

Criar DataFrames SparkR

Você pode criar um DataFrame de um R data.frame local, de uma fonte de dados ou usando uma query Spark SQL.

De um R local data.frame

A maneira mais simples de criar um DataFrame é converter um R data.frame local em um SparkDataFrame. Especificamente, podemos usar createDataFrame e passar o R local data.frame para criar um SparkDataFrame. Como a maioria das outras funções SparkR, a sintaxe createDataFrame mudou no Spark 2.0. O senhor pode ver exemplos disso no trecho de código abaixo. Para obter mais exemplos, consulte createDataFrame.

library(SparkR)
df <- createDataFrame(faithful)

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

Usando a API da fonte de dados

O método geral para criar um DataFrame a partir de uma fonte de dados é read.df. Este método usa o caminho para o arquivo carregar e o tipo de fonte de dados. O SparkR suporta a leitura de arquivos CSV, JSON, texto e Parquet nativamente.

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 arquivo CSV.

Adicionando um conector de fonte de dados com pacotes Spark

Através do pacote Spark você pode encontrar conectores de fonte de dados para formatos de arquivo populares, como Avro. Por exemplo, use o pacote spark-avro para carregar um arquivo Avro . A disponibilidade do pacote spark-avro depende da clusters versão dos seus . Consulte o arquivo Avro.

Primeiro pegue um data.frame existente, converta em um Spark DataFrame e salve-o como um arquivo 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 arquivo Avro foi salvo:

%fs ls /tmp/iris.avro

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

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

A API da fonte de dados também pode ser usada para salvar DataFrames em vários formatos de arquivo. Por exemplo, você pode salvar o DataFrame do exemplo anterior em um arquivo Parquet usando write.df.

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

De uma consulta Spark SQL

Você também pode criar SparkR DataFrames 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 é um SparkDataFrame.

operações de DataFrame

Spark DataFrames suporta uma série de funções para fazer o processamento de dados estruturados. Aqui estão alguns exemplos básicos. Uma lista completa pode ser encontrada nos documentos 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

SparkDataFrames oferece suporte a várias funções comumente usadas para agregar dados após o agrupamento. Por exemplo, você pode contar o número de vezes que cada tempo de espera aparece no dataset 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 várias funções que podem ser aplicadas diretamente a colunas para processamento e agregação de dados. O exemplo a seguir mostra o uso 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)

Aprendizado de máquina

SparkR expõe a maioria dos algoritmos MLlib . Sob o capô, SparkR usa MLlib para ensinar o modelo.

O exemplo a seguir mostra como construir um modelo GLM gaussiano usando SparkR. Para executar a regressão linear, defina a família como "gaussian". Para executar a regressão logística, defina a família como "binomial". Ao usar o SparkML, o GLM SparkR executa automaticamente a codificação one-hot de recursos categóricos para que não precise ser feita manualmente. Além strings e dos recursos do tipo Double, também é possível ajustar os recursos do MLlib Vector, para compatibilidade com outros componentes do 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 Tutorial: Analisar dados com glm.

Para obter exemplos adicionais, consulte Trabalhar com DataFrames e tabelas em R.