Sparklyr 1.7 est soutenant libre sur CRAN !

À cantonner sparklyr 1.7 du CRAN, exécutez

Là-dedans cet attention de blog, nous-même souhaitons ordonner les faits saillants suivants de la sparklyr Thème 1.7 :

Apollon et eaux de circonstance binaires

En beaucoup que dispositif d’dissection unifié quant à le persistance de circonstance à prolixe mesure, Indien Spark est caractéristique notoire quant à sa talent à rehausser les défis associés au livre, à la brusquerie et, bref et mieux, à la altérité des mégadonnées. Il n’est de ce fait pas étrange de distinguer qu’Indien Spark a importé une adaptation en intérêt intégrée des eaux de circonstance d’apologue et des eaux de circonstance binaires (entre les versions 2.4 et 3.0, respectivement). Les interfaces R correspondantes quant à les quelques eaux de circonstance, à gnose,
spark_read_image() et
spark_read_binary()ont été expédiés dernièrement entre le cageot de sparklyr 1.7.

L’remplaçant des fonctionnalités de prélude de circonstance équivalentes que spark_read_image() est probablement plus illustré par une démonstration éveillé plus loin, où spark_read_image()via le normalisé Indien Spark
ImageSchemainstrument à adapter les smorrebrod d’images brutes à un arracheur de caractéristiques recherché et à un taxinomiste, constituant une omnipotente soin Spark quant à les classifications d’images.

La démo

Image de Daniel Tuttle sur Unsplash

Là-dedans cette démo, nous-même allons façonner un oléoduc Spark ML diachronique autorisé de conserver les images de chats et de chiens alors virtuosité et conséquence, en utilisant spark_read_image() et un lacis neuronal convolutif pré-entraîné titularisé Inception (Szegedy et al. (2015)).

La commencement règne quant à inspirer une semblable démo alors une portabilité et une répétabilité maximales consiste à inspirer une expansion sparklyr qui accomplit ce qui suit :

Une adaptation de bibliographie d’un tel sparklyr l’expansion peut abstraction trouvée ici.

La moindre règne, caractéristique sûr, consiste à exciper les éléments mentionnés plus avant. sparklyr expansion quant à procéder une génie de fonctionnalités. Quelques-uns verrons des fonctionnalités de exceptionnellement nourri période extraites habilement de tout apologue de félin/mâtin en allant de ce que le pré-construit Inception-Le lacis de neurones convolutifs V3 a déjà enseigné à conserver une amoncellement d’images plantureusement alors béant :

library(sparklyr)
library(sparklyr.deeperer)

# NOTE: the honnête spark_home path to use depends on the apparence of the
# Spark cluster you are working with.
spark_home <- "/usr/lib/spark"
sc <- spark_connect(master = "yarn", spark_home = spark_home)

data_dir <- copy_images_to_hdfs()

# extract features from train- and test-data
image_data <- list()
for (x in c("galop", "expérimentation")) {
  # importation
  image_data((x)) <- c("dogs", "cats") %>%
    lapply(
      function(empreinte) {
        numeric_label <- ifelse(identical(empreinte, "dogs"), 1L, 0L)
        spark_read_image(
          sc, dir = envolé.path(data_dir, x, empreinte, fsep = "/")
        ) %>%
          dplyr::mutate(empreinte = numeric_label)
      }
    ) %>%
      do.call(sdf_bind_rows, .)

  dl_featurizer <- invoke_new(
    sc,
    "com.databricks.sparkdl.DeepImageFeaturizer",
    random_string("dl_featurizer") # uid
  ) %>%
    invoke("setModelName", "InceptionV3") %>%
    invoke("setInputCol", "apologue") %>%
    invoke("setOutputCol", "features")
  image_data((x)) <-
    dl_featurizer %>%
    invoke("transform", spark_dataframe(image_data((x)))) %>%
    sdf_register()
}

Témoin règne : équipé de fonctionnalités qui résument caractéristique le appartement de tout apologue, nous-même pouvons façonner un oléoduc Spark ML qui reconnaît les chats et les chiens en utilisant cependant la recul logistique

label_col <- "empreinte"
prediction_col <- "prediction"
oléoduc <- ml_pipeline(sc) %>%
  ml_logistic_regression(
    features_col = "features",
    label_col = label_col,
    prediction_col = prediction_col
  )
model <- oléoduc %>% ml_fit(image_data$galop)

Bref, on peut coder la virtuosité de ce modèle sur les images expérimentation :

predictions <- model %>%
  ml_transform(image_data$expérimentation) %>%
  dplyr::compute()

cat("Predictions vs. labels:n")
predictions %>%
  dplyr::select(!!label_col, !!prediction_col) %>%
  print(n = sdf_nrow(predictions))

cat("nAccuracy of predictions:n")
predictions %>%
  ml_multiclass_classification_evaluator(
    label_col = label_col,
    prediction_col = prediction_col,
    metric_name = "accuracy"
  ) %>%
    print()
## Predictions vs. labels:
## # Début: spark<?> (?? x 2)
##    empreinte prediction
##    <int>      <dbl>
##  1     1          1
##  2     1          1
##  3     1          1
##  4     1          1
##  5     1          1
##  6     1          1
##  7     1          1
##  8     1          1
##  9     1          1
## 10     1          1
## 11     0          0
## 12     0          0
## 13     0          0
## 14     0          0
## 15     0          0
## 16     0          0
## 17     0          0
## 18     0          0
## 19     0          0
## 20     0          0
##
## Accuracy of predictions:
## (1) 1

Jeune spark_apply() aptitudes

Optimisations et sérialiseurs personnalisés

Très sparklyr les utilisateurs qui ont essayé d’fabriquer
spark_apply() ou
doSpark quant à paralléliser les lithiase R dans les salariés Spark ont ​​éventuellement rencontré des difficultés liées à la sérialisation des fermetures R. Là-dedans nombreux scénarios, la évidé sérialisée de la broche R peut marcher extrêmement prolixe, habituellement en explication de la évidé de l’entourage R concentrique sollicité par la broche. Là-dedans d’différents scénarios, la sérialisation miss peut avaler extrêmement de période, compensant relativement le chance de performances de la parallélisation. Après-midi, autres optimisations ont été apportées à sparklyr quant à rehausser ces défis. L’une des optimisations consistait à commettre bon empirisme de la bâtiment de cyclothymique de développement entre Indien Spark quant à rapetisser les charge courants liés à la commercialisation d’listes de tâche partagés et immuables sur intégraux les salariés Spark. Là-dedans sparklyr 1.7, il existe équitablement un épaulement quant à la individualisation spark_apply() les sérialiseurs, qui offrent un diagnostic alors nerveux sur le concordat parmi la brusquerie et le période de diminution des algorithmes de sérialisation. Par essence, on peut éclairer

options(sparklyr.spark_apply.serializer = "qs")

,

qui appliquera les options par oubli de qs::qserialize() quant à arriver un période de diminution partisan, ou

options(sparklyr.spark_apply.serializer = function(x) qs::qserialize(x, preset = "fast"))
options(sparklyr.spark_apply.deserializer = function(x) qs::qdeserialize(x))

,

qui visera une brusquerie de sérialisation alors éveillé alors moins de diminution.

Prédiquer rigoureusement les dépendances

Là-dedans sparklyr 1.7, spark_apply() prête équitablement l’commencement
auto_deps = TRUE favoritisme. En tenant auto_deps activé, spark_apply() examinera la broche R appliquée, déduira la compte des packages R sollicité et ne copiera que les packages R sollicité et à elles dépendances transitives envoûtement les salariés Spark. Là-dedans de plusieurs scénarios, le auto_deps = TRUE l’favoritisme sera une alternance explicitement meilleure proportionnellement à la part par oubli packages = TRUE
style, qui consiste à complet pousser à l’secret .libPaths() aux nœuds de accouchement Spark, ou les avancées packages = <conditionnement config> favoritisme, qui indispensable les utilisateurs à aligner la compte des packages R sollicité ou à inspirer artisanalement un
spark_apply() emballer.

Meilleure assimilation alors les extensions sparklyr

Des efforts colossaux ont été déployés sparklyr 1.7 quant à favoriser la vie des sparklyr
auteurs d’extensions. L’tentative suggère quelques domaines où complet sparklyr l’expansion peut aller par un allée frictionnel et non honnête s’intégrant alors
sparklyr sont les suivants:

Quelques-uns détaillerons les adoucissement récents entre ces quelques domaines entre les sous-sections plus loin.

Caractériser le dbplyr Atmosphère de transfert SQL

sparklyr les extensions peuvent soutenant caractériser sparklyrc’est dbplyr Traductions SQL via le
spark_dependency()
limitation renvoyée par spark_dependencies() rappels. Ce original de élasticité devient considérable, par essence, entre les scénarios où un
sparklyr L’expansion doit encadrer des conversions de original quant à les smorrebrod entre les UDF Spark personnalisées. On en trouve un essence outillage entre
sparklyr.sedonaun sparklyr expansion quant à favoriser les analyses géo-spatiales à l’instrument d’Indien Sedona. UDF géospatiales prises en intérêt par Indien Sedona équivalentes que ST_Point() et ST_PolygonFromEnvelope() prescrire que toutes les smorrebrod soient
DECIMAL(24, 20) quantités préférablement que DOUBLEs. Sinon aucune individualisation quant à
sparklyrc’est dbplyr traduction SQL, le distinct voie quant à un dplyr
protestation impliquant ST_Point() analyser certainement entre sparklyr serait d’adapter absolument complet cast de original emballage à la protestation en utilisant dplyr::sql()par essence,

my_geospatial_sdf <- my_geospatial_sdf %>%
  dplyr::mutate(
    x = dplyr::sql("CAST(`x` AS DECIMAL(24, 20))"),
    y = dplyr::sql("CAST(`y` AS DECIMAL(24, 20))")
  ) %>%
  dplyr::mutate(pt = ST_Point(x, y))

.

Ce serait, entre une positive avare, antithèse à dplyrL’résultat de R est de épargner les utilisateurs de R de l’déchiffrement difficile des requêtes SQL. Ensuite qu’en personnalisant sparklyrc’est dplyr Traductions SQL (équivalentes qu’implémentées ici et ici ), sparklyr.sedona permet aux utilisateurs d’composer distinctement

my_geospatial_sdf <- my_geospatial_sdf %>% dplyr::mutate(pt = ST_Point(x, y))

à la fondé, et les casts de original Spark SQL sollicité sont générés rigoureusement.

Liaison améliorée quant à remémorer les impératifs Pagne/Scala

Là-dedans sparklyr 1.7, l’liaison R quant à les invocations Pagne/Scala a vu un audible public d’améliorations.

En tenant les versions précédentes de sparklyrplantureusement sparklyr les auteurs d’extensions rencontreraient des problèmes lorsqu’ils tenteraient d’remémorer des impératifs Pagne/Scala consentant un
Array(T) également l’un de à elles paramètres, où T est un original lié alors précis que danse.lang.Object / AnyRef. En produit, complet barbouille d’objets traversé sparklyrL’liaison d’adjuration Pagne/Scala de sera interprétée également un évident barbouille de danse.lang.Objects en l’inattention d’informations de original supplémentaires. Envers cette explication, une allant d’charité
jarray() a été mis en fondé entre le cageot de sparklyr 1.7 également voie de surmonter le empêchement susnommé. Par essence, l’montage

sc <- spark_connect(...)

arr <- jarray(
  sc,
  seq(5) %>% lapply(function(x) invoke_new(sc, "MyClass", x)),
  element_type = "MyClass"
)

attribuera à arr un bibliographie à un Array(MyClass) de grandeur 5, préférablement qu’un Array(AnyRef). Derrière, arr devient habile à abstraction passé en paramètre à des impératifs n’consentant que Array(MyClass)s également smorrebrod. Précocement, certaines solutions de pontage possibles de ce sparklyr la caractérisation comprenait la amélioration des signatures de allant quant à élire Array(AnyRef)s au position de Array(MyClass)s, ou adapter une traduction “encapsulée” de tout allant consentant Array(AnyRef)
smorrebrod et les changer en Array(MyClass) façade l’adjuration hygiéniquement dite. Aucune de ces solutions de pontage n’trouvait une terminaison incorporelle au empêchement.

Un divergent épreuve juste qui a été abordé entre sparklyr 1.7 implique équitablement des paramètres de allant qui doivent abstraction des nombres à virgule double évident virtuosité ou des avis de nombres à virgule double évident virtuosité. Envers ces scénarios,
jfloat() et
jfloat_array()
sont les impératifs d’charité qui permettent de aller des quantités digitaux entre R à
sparklyrl’liaison d’adjuration Pagne/Scala en beaucoup que paramètres alors les hommes souhaités.

De alors, donc que les versions précédentes de sparklyr n’a pas conquis à sérialiser les paramètres alors NaN facultés convenablement, sparklyr 1.7 compote NaNs également attendu entre son liaison d’adjuration Pagne/Scala.

D’différents nouvelles passionnantes

Il existe de nombreuses différents nouvelles fonctionnalités, améliorations et corrections de bogues apportées à
sparklyr 1.7, intégraux listés entre le meuble NEWS.md du sparklyr archive et averti entre sparklyrLes pages de bibliographie HTML de. Là-dedans un angoisse de brièveté, nous-même ne les décrirons pas intégraux en note entre ce ticket de blog.

Patrouille

Là-dedans l’fréquence chronologique, nous-même tenons à congédier les gens suivantes qui ont rédigé ou co-rédigé des demandes d’ablation interprète section du sparklyr Thème 1.7 :

Quelques-uns sommeils équitablement formidablement reconnaissants à intégraux ceux-ci qui ont prosterné des demandes de fonctionnalités ou des rendus de bogues, lequel plantureusement ont été formidablement utiles quant à dresser sparklyr entre ce qu’il est aujourd’hui.

De alors, l’fondateur de cet attention de blog est débiteur à @skeydan quant à ses excellentes suggestions éditoriales. Sinon ses idées sur la agréable autographe et la conférence, des expositions également celle auraient été moins lisibles.

Si vous-même souhaitez en gnose alors sur sparklyrnous-même vous-même recommandons de arraisonner sparklyr.ai, spark.rstudio.com, et équitablement de engouffrer divers précédents sparklyr claironner des messages similaires que sparklyr 1.6 et sparklyr 1.5.

C’est complet. Congédiement d’empressé lu!

Databricks, Inc. 2019. Pipelines d’essai en dimension quant à Indien Spark (traduction 1.5.0). https://spark-packages.org/conditionnement/databricks/spark-deep-learning.

Elson, Jeremy, John (JD) Affabilité, Jon Howell et Jared Saul. 2007. “Asirra : un CAPTCHA qui exploite la typage manuelle des images en allant des intérêts.” Là-dedans Comportement de la 14e meeting ACM sur la sûreté infographie et des communications (CCS), Comportement de la 14e meeting ACM sur la sûreté infographie et des communications (CCS). Rattachement for Computing Machinery, Inc. https://www.microsoft.com/en-us/research/livret/asirra-a-captcha-that-exploits-interest-aligned-manual-image-categorization/.

Szegedy, Christian, Wei Liu, Yangqing Jia, Parpaing Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Erhan, Vincent Vanhoucke et Andrew Rabinovich. 2015. “Avancer alors distant alors les convolutions.” Là-dedans Mirage par ordinant et aveu de formes (CVPR). http://arxiv.org/abs/1409.4842.

By nsmaat