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