Compartilhar via


Usar o sparklyr

O sparklyr é uma interface do R para Apache Spark. Ele fornece um mecanismo para interagir com o Spark usando interfaces do R familiares. Você pode usar o sparklyr por meio de definições de trabalho em lotes do Spark ou com notebooks interativos do Microsoft Fabric.

O sparklyr geralmente é usado com outros pacotes tidyverse como o dplyr. O Microsoft Fabric distribui a versão estável mais recente do sparklyr e tidyverse a cada lançamento do runtime. Você pode importá-los e começar a usar a API.

Pré-requisitos

  • Abrir ou criar um notebook. Para saber como, consulte Como usar notebooks do Microsoft Fabric.

  • Defina a opção de idioma para SparkR (R) para mudar o idioma principal.

  • Anexe seu bloco de anotações a um lakehouse. No lado esquerdo, selecione Adicionar para adicionar um lakehouse existente ou para criar um.

Conectar o sparklyr ao cluster do Spark do Synapse

Use o método de conexão a seguir em spark_connect() para estabelecer uma conexão sparklyr. Damos suporte a um novo método de conexão chamado synapse, que permite que você se conecte a uma sessão existente do Spark. Isso reduz consideravelmente a hora de início da sessão sparklyr. Além disso, contribuímos com esse método de conexão para o projeto sparklyr de software livre. Com method = "synapse", você pode usar sparklyr e SparkR na mesma sessão e compartilhar facilmente os dados entre eles.

# connect sparklyr to your spark cluster
spark_version <- sparkR.version()
config <- spark_config()
sc <- spark_connect(master = "yarn", version = spark_version, spark_home = "/opt/spark", method = "synapse", config = config)

Usar o sparklyr para ler dados

Uma nova sessão do Spark não contém dados. A primeira etapa é carregar dados na memória da sessão do Spark ou apontar o Spark para o local dos dados para que ele possa acessar os dados sob demanda.

# load the sparklyr package
library(sparklyr)

# copy data from R environment to the Spark session's memory
mtcars_tbl <- copy_to(sc, mtcars, "spark_mtcars", overwrite = TRUE)

head(mtcars_tbl)

Usando sparklyr, você também pode write e read dados de um arquivo do lakehouse usando o caminho do ABFS. Para ler e gravar em um Lakehouse, primeiro adicione-o à sua sessão. No lado esquerdo, selecione Adicionar para adicionar um lakehouse existente ou criar um.

Para localizar o caminho do ABFS, clique com o botão direito do mouse na pasta Arquivos em seu lakehouse e selecione Copiar caminho do ABFS. Cole seu caminho para substituir abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files neste código:

temp_csv = "abfss://xxxx@onelake.dfs.fabric.microsoft.com/xxxx/Files/data/mtcars.csv"

# write the table to your lakehouse using the ABFS path
spark_write_csv(mtcars_tbl, temp_csv, header = TRUE, mode = 'overwrite')

# read the data as CSV from lakehouse using the ABFS path
mtcarsDF <- spark_read_csv(sc, temp_csv) 
head(mtcarsDF)

Usar o sparklyr para manipular dados

sparklyr fornece vários métodos para processar dados dentro do Spark usando:

  • Comandos de dplyr
  • SparkSQL
  • Transformadores de recursos do Spark

Use dplyr.

Você pode usar comandos familiares de dplyr para preparar dados dentro do Spark. Os comandos são executados dentro do Spark, portanto, não há transferências de dados desnecessárias entre o R e o Spark.

Clique em Manipular dados com dplyr para ver a documentação extra sobre como usar o dplyr com o Spark.

# count cars by the number of cylinders the engine contains (cyl), order the results descendingly
library(dplyr)

cargroup <- group_by(mtcars_tbl, cyl) %>%
  count() %>%
  arrange(desc(n))

cargroup

sparklyr e dplyr traduzem os comandos do R no SQL do Spark. Para ver a consulta resultante, use show_query():

# show the dplyr commands that are to run against the Spark connection
dplyr::show_query(cargroup)

Usar SQL

Também é possível executar consultas SQL diretamente em tabelas dentro de um cluster do Spark. O spark_connection() objeto implementa uma interface DBI para Spark, para que você possa usar dbGetQuery() para executar o SQL e retornar o resultado como um quadro de dados do R:

library(DBI)
dbGetQuery(sc, "select cyl, count(*) as n from spark_mtcars
GROUP BY cyl
ORDER BY n DESC")

Usar transformadores de recursos

Ambos os métodos anteriores dependem de instruções SQL. O Spark fornece comandos que tornam algumas transformações de dados mais convenientes e sem o uso do SQL.

Por exemplo, o comando ft_binarizer() simplifica a criação de uma nova coluna que indica se o valor de outra coluna está acima de um determinado limite.

Você pode encontrar a lista completa dos Transformadores de Recursos do Spark disponíveis por meio de sparklyr da Referência -FT.

mtcars_tbl %>% 
  ft_binarizer("mpg", "over_20", threshold = 20) %>% 
  select(mpg, over_20) %>% 
  head(5)

Compartilhar dados entre sparklyr e SparkR

Quando você conectar o sparklyr ao cluster do Synapse Spark com method = "synapse", você pode usar sparklyr e SparkR na mesma sessão e compartilhar facilmente os dados entre eles. Você pode criar uma tabela do spark em sparklyr e ler no SparkR.

# load the sparklyr package
library(sparklyr)

# Create table in `sparklyr`
mtcars_sparklyr <- copy_to(sc, df = mtcars, name = "mtcars_tbl", overwrite = TRUE, repartition = 3L)

# Read table from `SparkR`
mtcars_sparklr <- SparkR::sql("select cyl, count(*) as n
from mtcars_tbl
GROUP BY cyl
ORDER BY n DESC")

head(mtcars_sparklr)

Aprendizado de máquina

Este é um exemplo em que usamos ml_linear_regression() para ajustar um modelo de regressão linear. Usamos o conjunto de dados interno mtcars e vemos se podemos prever o consumo de combustível de um carro (mpg) com base em seu peso (wt) e o número de cilindros que o motor contém (cyl). Assumimos em cada caso que a relação entre mpg e cada um de nossos recursos é linear.

Gerar conjuntos de dados de teste e treinamento

Use uma divisão, 70% para treinamento e 30% para testar o modelo. Jogar com essa proporção resulta em modelos diferentes.

# split the dataframe into test and training dataframes

partitions <- mtcars_tbl %>%
  select(mpg, wt, cyl) %>% 
  sdf_random_split(training = 0.7, test = 0.3, seed = 2023)

Treinar o modelo

Treine o modelo de regressão logística.

fit <- partitions$training %>%
  ml_linear_regression(mpg ~ .)

fit

Agora use summary() para aprender um pouco mais sobre a qualidade do nosso modelo e a significância estatística de cada um de nossos preditores.

summary(fit)

Usar o modelo

Você pode aplicar o modelo no conjunto de dados de teste chamando ml_predict().

pred <- ml_predict(fit, partitions$test)

head(pred)

Para obter uma lista de modelos do Spark ML disponíveis por meio do Sparklyr, visite Referência – ML

Desconectar-se do cluster Spark

Você pode chamar spark_disconnect() ou selecionar o botão Parar sessão na parte superior da faixa de opções do bloco de anotações para encerrar a sessão do Spark.

spark_disconnect(sc)

Saiba mais sobre as funcionalidades do R: