sparklyr 1.3 est désormais employable sur CRAN, derrière les nouveautés majeures suivantes :

  • Épreuves d’période aérien contre courir naturellement les avis et les structures
  • Gain en abordage d’Indien Avro, un cageot de sérialisation de opportunité orienté défilé
  • Sérialisation personnalisée à l’adjoint des charges R contre manger et graver n’importe laquelle mensuration de opportunité
  • Méconnaissables améliorations analogues que la accord derrière EMR 6.0 et Spark 3.0 et la domination en abordage ancienne de la casier de séries chronologiques Flint

À établir sparklyr 1.3 du CRAN, exécutez

Là-dedans cet éditorial, nous-même mettrons en postulat certaines nouvelles fonctionnalités majeures introduites à cause sparklyr 1.3 et présenterons des scénarios où ces fonctionnalités sont utiles. Privilège qu’un couru monde d’améliorations et de corrections de bogues (en propre celles liées à spark_apply()Indien Arrow et les connexions Spark secondaires) accomplissaient autant une conflit importante de cette sorte, ils ne seront pas le tireuse de cet éditorial, et ce sera un occupation complaisant contre le liseur d’en gnose principalement à à eux tireuse à absenter du classeur sparklyr NEWS.

Épreuves d’période aérien

Les charges d’période aérien sont des constructions Spark SQL intégrées qui permettent d’bâtonner utilement des expressions commun définies par l’usager à des bonshommes de opportunité complexes pareils que des avis et des structures. Chez une démonstration leste contre saisir pour les charges d’période aérien sont utiles, disons qu’un lucarne Scrooge McDuck a plongé à cause son formidable coffre-fort d’lettre et a trouvé de grandes quantités de inférieurement, de nickels, de dix inférieurement et de quarts. Obtenant un avidité irréprochable contre les structures de opportunité, il a décidé de ranger les quantités et les facultés nominales de intégral à cause double colonnes de inscription Spark SQL :

library(sparklyr)

sc <- spark_connect(master = "endroit", sorte = "2.4.5")
coins_tbl <- copy_to(
  sc,
  tibble::tibble(
    quantities = list(c(4000, 3000, 2000, 1000)),
    values = list(c(1, 5, 10, 25))
  )
)

Déclarant en conséquence sa héroïsme directe de 4k pennies, 3k nickels, 2k dimes et 1k quarters. Contre gratifier Scrooge McDuck à arranger la héroïsme intacte de quelque bonhomme de clownerie à cause sparklyr 1.3 ou aérien, nous-même pouvons bâtonner hof_zip_with()l’identique étincelant de ZIP_WITH, à quantities pilier et values pilier, combinant des paires d’éléments de avis à cause les double colonnes. Chez vous-même l’avez probablement deviné, nous-même nécessitons autant fixer comme concilier ces éléments, et lequel meilleure fabrication d’y terminer qu’une clair unilatérale concise~ .x * .yà cause R, qui dit que nous-même voulons (accumulation * héroïsme) contre quelque bonhomme de clownerie ? Aussi, nous-même avons ce qui suit :

result_tbl <- coins_tbl %>%
  hof_zip_with(~ .x * .y, dest_col = total_values) %>%
  dplyr::select(total_values)

result_tbl %>% dplyr::tricot(total_values)
(1)  4000 15000 20000 25000

Alors le acquisition 4000 15000 20000 25000 nous-même disant qu’il y a au intact 40 dollars de centimes, 150 dollars de nickels, 200 dollars de dix inférieurement et 250 dollars de quarts, également envisagé.

Prétexter une contraire empressement sparklyr nommée hof_aggregate()qui effectue une calcul AGGREGATE à cause Spark, nous-même pouvons en conséquence arranger la héroïsme directe de Scrooge McDuck en empressement de result_tblstockant le acquisition à cause une journal pilier nommée intact. Remarquez que contre que cette calcul d’homogénéité fonctionne, nous-même nécessitons nous-même certifier que la héroïsme de initiation de l’homogénéité a un bonhomme de opportunité (à gnose, BIGINT) qui est explicable derrière le bonhomme de opportunité de total_values (laquelle est ARRAY<BIGINT>), également affirmé ci-après:

result_tbl %>%
  dplyr::mutate(zero = dplyr::sql("CAST (0 AS BIGINT)")) %>%
  hof_aggregate(start = zero, ~ .x + .y, expr = total_values, dest_col = intact) %>%
  dplyr::select(intact) %>%
  dplyr::tricot(intact)
(1) 64000

La héroïsme directe de Scrooge McDuck est tandis de 640 dollars.

Les contradictoires charges d’période aérien prises en abordage par Spark SQL jusqu’affamer incluent transform, filteret existségalement annoncé ici, et approprié à l’appréciation plus avant, à eux homologues (à gnose, hof_transform(), hof_filter()et hof_exists()) existent entiers à cause sparklyr 1.3, comme qu’ils puissent nature intégrés derrière d’contradictoires dplyr verbes de apprêté idiomatique en R.

Avro

Un contraire bilan râblé de la sorte sparklyr 1.3 est sa domination en abordage intégrée des pluies de opportunité Avro. Indien Avro est un pacte de sérialisation de opportunité généreusement employé qui goupillé l’influence d’un mensuration de opportunité binaires derrière la agilité des définitions de crayon JSON. Contre écourter le boum derrière les pluies de opportunité Avro, à cause sparklyr 1.3, dès qu’une cohésion Spark est instanciée derrière spark_connect(..., produit = "avro")sparklyr déterminera mécaniquement lequel sorte de spark-avro produit à apposer derrière cette cohésion, évitant en conséquence de peuplé douleurs de traits potentiels aux utilisateurs de sparklyr essayant de identifier la sorte correcte de spark-avro par ceux-ci. Pareil à la fabrication lequel spark_read_csv() et spark_write_csv() sont en agora contre chauffer derrière des opportunité CSV, spark_read_avro() et spark_write_avro() Des méthodes ont été implémentées à cause sparklyr 1.3 contre aider la connaissance et l’sténographie de fichiers Avro via une cohésion Spark associable Avro, également illustré à cause l’appréciation ci-après :

library(sparklyr)

# The `produit = "avro"` choix is only supported in Spark 2.4 or higher
sc <- spark_connect(master = "endroit", sorte = "2.4.5", produit = "avro")

sdf <- sdf_copy_to(
  sc,
  tibble::tibble(
    a = c(1, NaN, 3, 4, NaN),
    b = c(-2L, 0L, 1L, 3L, 2L),
    c = c("a", "b", "c", "", "d")
  )
)

# This example Avro schema is a JSON culotte that essentially says all columns
# ("a", "b", "c") of `sdf` are nullable.
avro_schema <- jsonlite::toJSON(list(
  bonhomme = "succès",
  name = "topLevelRecord",
  fields = list(
    list(name = "a", bonhomme = list("douteuse", "null")),
    list(name = "b", bonhomme = list("int", "null")),
    list(name = "c", bonhomme = list("culotte", "null"))
  )
), auto_unbox = TRUE)

# persist the Spark data frame from above in Avro mensuration
spark_write_avro(sdf, "/tmp/data.avro", as.character(avro_schema))

# and then read the same data frame back
spark_read_avro(sc, "/tmp/data.avro")
# Début: spark<data> (?? x 3)
      a     b c
  <dbl> <int> <chr>
  1     1    -2 "a"
  2   NaN     0 "b"
  3     3     1 "c"
  4     4     3 ""
  5   NaN     2 "d"

Sérialisation personnalisée

En principalement des formats de sérialisation de opportunité souvent utilisés pareils que CSV, JSON, Plancher et Avro, à absenter de sparklyr 1.3, les procédures de sérialisation et de désérialisation de trames de opportunité personnalisées implémentées à cause R peuvent autant nature exécutées sur les employés Spark via le débutant spark_read() et spark_write() méthodes. Certains pouvons saisir les double en efficacité à flanc un appréciation leste ci-après, où saveRDS() est requis à absenter d’une empressement d’sténographie définie par l’usager contre constater toutes les paliers d’un éphéméride de opportunité Spark à cause 2 fichiers RDS sur le refrain, et readRDS() est accueillie à absenter d’une empressement de liseur définie par l’usager contre manger les opportunité des fichiers RDS environs Spark :

library(sparklyr)

sc <- spark_connect(master = "endroit")
sdf <- sdf_len(sc, 7)
paths <- c("/tmp/file1.RDS", "/tmp/file2.RDS")

spark_write(sdf, writer = function(df, path) saveRDS(df, path), paths = paths)
spark_read(sc, paths, reader = function(path) readRDS(path), columns = c(id = "integer"))
# Début: spark<?> (?? x 1)
     id
  <int>
1     1
2     2
3     3
4     4
5     5
6     6
7     7

Méconnaissables améliorations

Sparklyr.flint

Sparklyr.flint est une augmentation sparklyr qui vise à ramener les fonctionnalités de la casier de séries chronologiques Flint naturellement accessibles depuis R. Lui-même est ce jour en conseil de agrandissement. Une gentille journal est que, avoir que la casier dépêche Flint ait été conçue contre aller derrière Spark 2.x, un fork doigt perturbé fonctionnera avoir derrière Spark 3.0 et à cause le cageot d’augmentation sparklyr trouvant. sparklyr.flint peut identifier mécaniquement la sorte de la casier Flint à commissionner en empressement de la sorte de Spark lequel il est connecté. Une contraire gentille journal est, également république monsieur, sparklyr.flint ne sait pas plus grand-chose de son partisane fatalité. Éventuellement pouvez-vous boursicoter un nécessiter opérant à cause l’naissance de son descendance !

DME 6.0

Cette sorte récipient autant une transmutation mineure purement importante qui permet à sparklyr de se accoupler justement à la sorte de Spark 2.4 incluse à cause Amazon EMR 6.0.

Préalablement, sparklyr supposait mécaniquement que intégral Spark 2.x desquelles il se connectait trouvait bâti derrière Scala 2.11 et tentait autant de commissionner entiers les artefacts Scala commandé construits derrière Scala 2.11. Ceci est devenu contingent tandis de la cohésion à Spark 2.4 à absenter d’Amazon EMR 6.0, qui est bâti derrière Scala 2.12. À absenter de sparklyr 1.3, un tel tracas peut nature intrépide en spécifiant franchement scala_version = "2.12" tandis de l’invite spark_connect() (par appréciation, spark_connect(master = "yarn-client", scala_version = "2.12")).

Flambée 3.0

Finalement et principalement, il convient de appeler que sparklyr 1.3.0 est évident contre nature totalement associable derrière le Spark 3.0 hier publié. Certains vous-même recommandons extrêmement de équilibrer à phase votre ampliation de sparklyr environs la sorte 1.3.0 si vous-même prévoyez d’empressé Spark 3.0 à cause le cageot de votre alternance de boum de opportunité à l’descendance.

Obligation

Là-dedans l’période chronologique, nous-même tenons à congédier les individus suivantes contre empressé vénéré des demandes d’arrachage environs sparklyr 1.3 :

Certains sommeils autant reconnaissants contre à eux précieuses contributions sur la planche de arrivée sparklyr 1.3, # 2434 et # 2551 de (@javierluraschi)(https://github.com/javierluraschi), et d’ingénieux conseils spirituels sur #1773 et #2514 de @mattpollock et @benmwhite.

Veuillez expliquer que si vous-même pensez que vous-même êtes disparu de la autocritique plus avant, c’est probablement étant donné que votre impôt a été considérée également exécutant conflit de la prochaine sorte de Sparklyr de préférence que également exécutant conflit de la sorte présente. Certains nous-même efforçons de nous-même certifier que entiers les contributeurs sont mentionnés à cause cette portion. Si vous-même pensez qu’il y a une impair, n’hésitez pas à voir l’artisan de ce bulletin de blog par courriel (yitao at rstudio dot com) et à solliciter une réforme.

Si vous-même souhaitez en gnose principalement sur sparklyrnous-même vous-même recommandons de prospecter sparklyr.ai, spark.rstudio.com et certaines des quotidiens précédentes analogues que sparklyr 1.2 et sparklyr 1.1.

Congédiement d’empressé lu!

By nsmaat