Partilhar via


Use o sparklyr

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

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

Pré-requisitos

  • Obtenha uma assinatura do Microsoft Fabric. Ou inscreva-se para uma avaliação gratuita do Microsoft Fabric.

  • Entre no Microsoft Fabric.

  • Use o seletor de experiência no lado esquerdo da sua página inicial para alternar para a experiência Synapse Data Science.

    Screenshot of the experience switcher menu, showing where to select Data Science.

  • Abra ou crie um bloco de notas. Para saber como, consulte Como usar blocos de anotações do Microsoft Fabric.

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

  • Ligue o seu bloco de notas a uma casa no lago. No lado esquerdo, selecione Adicionar para adicionar uma casa de lago existente ou para criar uma casa de lago.

Conecte o sparklyr ao cluster Synapse Spark

Use o seguinte método de conexão para spark_connect() estabelecer uma sparklyr conexão. Suportamos um novo método de conexão chamado synapse, que permite que você se conecte a uma sessão Spark existente. Reduz drasticamente o tempo de início da sparklyr sessão. Além disso, contribuímos com esse método de conexão para o projeto sparklyr de código aberto. Com method = "synapse"o , você pode usar ambos sparklyr e SparkR na mesma sessão e compartilhar dados facilmente 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 sparklyro , você também write pode e read dados de um arquivo Lakehouse usando o caminho ABFS. Para ler e escrever em uma Lakehouse, primeiro adicione-a à sua sessão. No lado esquerdo do bloco de anotações, selecione Adicionar para adicionar um Lakehouse existente ou criar um Lakehouse.

Para encontrar seu caminho ABFS, clique com o botão direito do mouse na pasta Arquivos em sua Lakehouse e selecione Copiar caminho ABFS. Cole o 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)

Use o sparklyr para manipular dados

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

  • dplyr comandos
  • SparkSQL
  • Transformadores de características Spark

Utilizar o comando dplyr

Você pode usar comandos familiares 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 Manipulando dados com para ver a documentação extra sobre como usar o dplyr com dplyr 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 traduzir os comandos R para o Spark SQL para nós. 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 o Spark, para que você possa usar dbGetQuery() para executar SQL e retornar o resultado como um quadro de dados R:

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

Usar transformadores de recurso

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

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

Você pode encontrar a lista completa dos Transformadores de Recurso de Faísca disponíveis em sparklyr Referência -FT.

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

Partilhar dados entre sparklyr e SparkR

Quando você se conecta sparklyr ao cluster de faísca de sinapse com method = "synapse"o , pode usar ambos sparklyr e SparkR na mesma sessão e compartilhar facilmente dados entre eles. Você pode criar uma tabela de faísca e lê-la em sparklyr 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)

Machine learning

Aqui está um exemplo em que usamos ml_linear_regression() para ajustar um modelo de regressão linear. Usamos o conjunto de dados embutido e vemos se podemos prever o consumo de combustível de um carro () com base no seu peso (), e no número de mtcars cilindros que o motor contém (wtmpgcyl). Assumimos em cada caso que a relação entre mpg e cada uma das nossas características é linear.

Gerar conjuntos de dados de teste e treinamento

Use uma divisão, 70% para treinamento e 30% para testar o modelo. Brincar com esta 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)

Preparar o modelo

Treinar 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 dos nossos preditores.

summary(fit)

Use 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 dos modelos do Spark ML disponíveis através do sparklyr, visite Reference - ML

Desconectar do cluster Spark

Você pode ligar 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 R: