Visão geral do SparkR
O SparkR é um pacote R que fornece um front-end leve para usar o Apache Spark a partir do R. O SparkR também oferece suporte ao aprendizado de máquina distribuído usando o MLlib.
Referência da função SparkR
O senhor pode encontrar a referência mais recente da função SparkR em spark.apache.org.
O senhor também pode acessar a ajuda da função view no R Notebook ou RStudio depois de importar o pacote SparkR.
SparkR em 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 em spark-submit Job
O senhor pode executar scripts que usam SparkR em Databricks como spark-submit Job, com pequenas modificações no código.
Criar DataFrames SparkR
O senhor pode criar um DataFrame a partir de um R data.frame
local, de uma fonte de dados ou usando uma consulta Spark SQL.
De um R local data.frame
A maneira mais simples de criar um DataFrame é converter um R local data.frame
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 do SparkR, a sintaxe do 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 fonte de dados API
O método geral para criar um DataFrame a partir de uma fonte de dados é read.df
.
Esse método usa o caminho do arquivo a 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.
Adição de um conector de fonte de dados com Spark pacote
Em Spark pacote, o senhor pode encontrar conectores de fontes de dados para formatos de arquivos populares, como Avro. Como exemplo, use o pacote spark-avro para carregar um arquivo Avro. A disponibilidade do pacote spark-avro depende da versão do seu clustering. Veja o arquivo Avro.
Primeiro, pegue um data.frame
existente, converta-o 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 fonte de dados API também pode ser usada para salvar DataFrames em vários formatos de arquivo. Por exemplo, o senhor 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
O senhor também pode criar SparkR DataFrames usando consultas 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.
DataFrame operações
Os DataFrames do Spark suportam várias funções para realizar o 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
O SparkDataFrames suporta várias funções comumente usadas para dados agregados após o agrupamento. Por exemplo, o senhor pode contar o número de vezes que cada tempo de espera aparece no fiel dataset.
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)))
Coluna operações
O SparkR fornece várias funções que podem ser aplicadas diretamente às colunas do site 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
SparkR expõe a maioria dos algoritmos do MLlib. Por trás disso, o SparkR usa o 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, o GLM SparkR
executa automaticamente a codificação one-hot do recurso categórico para que não seja necessário fazê-lo manualmente.
Além das cadeias de caracteres e do recurso do tipo Double, também é possível encaixar o recurso
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 obter um tutorial, consulte o tutorial: Analisar dados com glm.
Para obter exemplos adicionais, consulte Trabalhar com DataFrames e tabelas no R.