Compartilhar via


Visão geral do SparkR

O SparkR é um pacote R que fornece um front-end leve para usar o Apache Spark no R. O SparkR também dá suporte ao aprendizado de máquina distribuído usando MLlib.

Referência de função do SparkR

Você pode encontrar a referência de função mais recente do SparkR em Spark.Apache.org.

Você também pode exibir a ajuda da função em notebooks R ou RStudio depois de importar o pacote SparkR.

Documentação do R incorporado

SparkR em notebooks

  • No Spark 2.0 e superior, você não precisa passar um objeto sqlContext explicitamente para cada chamada de função.
  • No Spark 2.2 e superior, os notebooks não importam mais o SparkR por padrão, pois as funções do SparkR entravam em conflito com as funções nomeadas de forma semelhante de outros pacotes populares. Para usar o SparkR, você pode chamar library(SparkR) nos notebooks. A sessão do SparkR já está configurada e todas as funções do SparkR se comunicarão com o cluster anexado usando a sessão existente.

SparkR nos trabalhos spark-submit

Você pode executar scripts que usem o SparkR no Azure Databricks como trabalhos spark-submit, com pequenas modificações de código.

Criar DataFrames do SparkR

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

Usando um data.frame de R local

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

library(SparkR)
df <- createDataFrame(faithful)

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

Usando a API de fonte de dados

O método geral de criação de um DataFrame usando uma fonte de dados é read.df. Esse método usa o caminho de carregamento do arquivo e o tipo de fonte de dados. O SparkR dá suporte à 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 do Spark

Nos Pacotes do Spark, você encontra conectores de fonte de dados de 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 versão do seu cluster. Confira Arquivo Avro.

Primeiro, pegue um data.frame existente, converta em um DataFrame do Spark 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 de 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

Usando uma consulta SQL do Spark

Você também pode criar DataFrames do SparkR usando consultas do 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

Os DataFrames do Spark dão suporte a várias funções para realizar o processamento de dados estruturado. Veja aqui alguns exemplos básicos. Há uma lista completa em docs de API.

Selecionar 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

Os SparkDataFrames aceitam várias funções usadas para agregar dados após o agrupamento. Por exemplo, você pode contar o número de vezes em que cada tempo de espera é exibido no conjunto confiável.

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 de dados e agregação. 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)

Machine learning

O SparkR expõe a maioria dos algoritmos de MLLib. Nos bastidores, o SparkR usa MLlib para treinar o modelo.

O exemplo a seguir mostra como criar um modelo GLM gaussiano usando o 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 GLM, o SparkR executa automaticamente a codificação one-hot de recursos categóricos para que isso não precise ser feito manualmente. Além dos recursos do tipo String e Double, também é possível se adaptar aos recursos de vetor do MLlib, 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 no R.