Foreach, Spark 3.0 e Databricks Join


Eis a glória que é Sparklyr 1.2! Neste lançamento, as seguintes novas gostosas surgiram nos holofotes:

  • UM registerDoSpark método para criar um foreach Again -end paralelo alimentado pela Spark que permite que centenas de pacotes R existentes sejam executados em Spark.
  • Suporte para Databricks Joinpermitindo sparklyr conectar -se a clusters de banco de dados remotos.
  • Suporte melhorado para Spark estruturas ao coletar e consultar seus atributos aninhados com dplyr.

Vários problemas entre-op observados com sparklyr e a visualização do Spark 3.0 também foi abordada recentemente, na esperança de que, quando o Spark 3.0 nos agradece oficialmente com sua presença, sparklyr estará totalmente pronto para trabalhar com ele. Mais notavelmente, características -chave como spark_submitAssim, sdf_bind_rowsE as conexões independentes estão finalmente trabalhando com o Spark 3.0 Preview.

Para instalar sparklyr 1.2 de Cran Run,

A lista completa de alterações está disponível no Sparklyr NOTÍCIAS arquivo.

Foreach

O foreach o pacote fornece o %dopar% Operador para iterar sobre elementos em uma coleção em paralelo. Usando sparklyr 1.2, agora você pode registrar o Spark como um again -end usando registerDoSpark() e depois iterar facilmente sobre R Objetos usando Spark:

(1) 1.000000 1.414214 1.732051

Como muitos pacotes R são baseados em foreach Para realizar computação paralela, agora podemos usar todos esses ótimos pacotes em Spark também!

Por exemplo, podemos usar Parsnip e o Tune pacote com dados de mlbench Para executar o ajuste do hyperparâmetro em faísca com facilidade:

library(tune)
library(parsnip)
library(mlbench)

information(Ionosphere)
svm_rbf(price = tune(), rbf_sigma = tune()) %>%
  set_mode("classification") %>%
  set_engine("kernlab") %>%
  tune_grid(Class ~ .,
    resamples = rsample::bootstraps(dplyr::choose(Ionosphere, -V2), instances = 30),
    management = control_grid(verbose = FALSE))
# Bootstrap sampling
# A tibble: 30 x 4
   splits            id          .metrics          .notes
 *                                
 1  Bootstrap01  
 2  Bootstrap02  
 3  Bootstrap03  
 4  Bootstrap04  
 5  Bootstrap05  
 6  Bootstrap06  
 7  Bootstrap07  
 8  Bootstrap08  
 9  Bootstrap09  
10  Bootstrap10  
# … with 20 extra rows

A conexão Spark já estava registrada, então o código foi executado em Spark sem alterações adicionais. Podemos verificar se este foi o caso navegando para a interface da Internet Spark:

Foreach, Spark 3.0 e Databricks Join

Databricks Join

Databricks Join permite que você conecte seu IDE favorito (como Rstudio!) para uma faísca Databricks conjunto.

Você primeiro terá que instalar o databricks-connect pacote conforme descrito em nosso Readme e inicie um cluster de banco de dados, mas uma vez que estiver pronto, conectar -se ao cluster remoto é tão fácil quanto executar:

sc <- spark_connect(
  methodology = "databricks",
  spark_home = system2("databricks-connect", "get-spark-home", stdout = TRUE))

É isso, agora você está remotamente conectado a um cluster Databricks da sua sessão R native.

Estruturas

Se você usou anteriormente accumulate Para desserializar os quadros de dados de faísca estruturalmente complexos em seus equivalentes em R, você provavelmente notou que as colunas Spark SQL Struct foram mapeadas apenas em cordas JSON em r, que não period perfect. Você também pode ter encontrado um muito temido java.lang.IllegalArgumentException: Invalid kind checklist erro ao usar dplyr Para consultar atributos aninhados de qualquer coluna STREST de um quadro de dados de faísca no sparklyr.

Infelizmente, muitas vezes, em casos de uso de faísca do mundo actual, os dados que descrevem entidades que compreendem sub-entrada (por exemplo, um catálogo de produtos de todos os componentes de {hardware} de alguns computadores) precisam ser desnormalizados / moldados de maneira orientada a objetos na forma de Spark SQL Structs para permitir consultas de leitura eficientes. Quando a Sparklyr tinha as limitações mencionadas acima, os usuários geralmente tinham que inventar suas próprias soluções alternativas ao consultar colunas de Spark Struct, o que explicava por que havia uma demanda standard em massa por Sparlyr para ter melhor suporte para tais casos de uso.

A boa notícia é com sparklyr 1.2, essas limitações não existem mais mais ao trabalhar em execução com o Spark 2.4 ou superior.

Como exemplo concreto, considere o seguinte catálogo de computadores:

library(dplyr)

computer systems <- tibble::tibble(
  id = seq(1, 2),
  attributes = checklist(
    checklist(
      processor = checklist(freq = 2.4, num_cores = 256),
      value = 100
   ),
   checklist(
     processor = checklist(freq = 1.6, num_cores = 512),
     value = 133
   )
  )
)

computer systems <- copy_to(sc, computer systems, overwrite = TRUE)

Um típico dplyr use case envolvendo computer systems seria o seguinte:

Como mencionado anteriormente, antes sparklyr 1.2, essa consulta falharia com Error: java.lang.IllegalArgumentException: Invalid kind checklist.

Enquanto que com sparklyr 1.2, o resultado esperado é retornado na seguinte forma:

# A tibble: 1 x 2
     id attributes
   
1     1 

onde high_freq_computers$attributes é o que esperaríamos:

((1))
((1))$value
(1) 100

((1))$processor
((1))$processor$freq
(1) 2.4

((1))$processor$num_cores
(1) 256

E mais!

Por último, mas não menos importante, ouvimos falar de vários pontos de dor sparklyr Os usuários se depararam e também abordaram muitos deles neste lançamento. Por exemplo:

  • O tipo de information em r agora está corretamente serializado no tipo de information spark sql por copy_to
  • %>% print(n = 20) Agora realmente imprime 20 linhas como esperado em vez de 10
  • spark_connect(grasp = "native") emitirá uma mensagem de erro mais informativa se estiver falhando porque a interface de loopback não está em alta

… Para citar alguns. Queremos agradecer à comunidade de código aberto por seu suggestions contínuo sobre sparklyre estão ansiosos para incorporar mais desse suggestions para fazer sparklyr Ainda melhor no futuro.

Finalmente, em ordem cronológica, desejamos agradecer aos seguintes indivíduos por contribuir com sparklyr 1.2: Zero323Assim, Andy ZhangAssim, Yitao LiAssim,
Javier LuraschiAssim, Hossein FalakiAssim, Lu WangAssim, Samuel Macedo e Jozef Hajnala. Ótimo trabalho a todos!

Se você precisar acompanhar sparklyrpor favor, visite Sparklyr.aiAssim, Spark.rstudio.comou alguns dos posts de lançamento anterior: Sparklyr 1.1 e Sparklyr 1.0.

Obrigado por ler este publish.

Deixe um comentário

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *