Partilhar via


Descrição geral do SparkR

O SparkR é um pacote R que fornece um frontend leve para usar o Apache Spark da R. O SparkR também suporta aprendizado de máquina distribuído usando MLlib.

Referência da função do SparkR

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

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

Documentação do R incorporado

SparkR em notebooks

  • Para o Spark 2.0 e superior, não é necessário passar explicitamente um sqlContext objeto para cada chamada de função.
  • Para o Spark 2.2 e superior, os notebooks não importam mais o SparkR por padrão 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 ligar library(SparkR) para seus blocos de anotações. A sessão do SparkR já está configurada e todas as funções do SparkR conversarão com o cluster anexado usando a sessão existente.

SparkR em trabalhos de envio de faísca

Você pode executar scripts que usam o SparkR no Azure Databricks como trabalhos de envio de faísca, com pequenas modificações de código.

Criar DataFrames SparkR

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

De um R local data.frame

A maneira mais simples de criar um DataFrame é converter um R data.frame local em um SparkDataFramearquivo . Especificamente, podemos usar createDataFrame e passar no R data.frame local para criar um SparkDataFrame. Como a maioria das outras funções do SparkR, createDataFrame a sintaxe foi alterada no Spark 2.0. Você 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. Esse método usa o caminho para o arquivo ser carregado 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 a partir do arquivo CSV.

Adicionando um conector de fonte de dados com pacotes Spark

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

Primeiro, pegue um existente data.frame, 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

A partir de uma consulta SQL do Spark

Você também pode criar DataFrames SparkR usando consultas SQL do Spark.

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

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

SparkDataFrames suporta uma série de 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 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 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)

Aprendizagem automática

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

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

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