Depuis sparklyr.flintun sparklyr accroissement vers déterrer coalition des fonctionnalités de séries chronologiques de Flint via sparklyra été établi en septembre, les gens y avons planté un couru multitude d’améliorations et avons discipliné alors grâce sparklyr.flint 0,2 à CRAN.

Entre cet agence de blog, les gens mettons en cliché les nouvelles fonctionnalités et améliorations suivantes de sparklyr.flint 0.2 :

L’ASOF atteint

Verso ceux-ci qui ne connaissent pas le solution, les genoux ASOF sont des études de charnière temporelles basées sur une accord faux des horodatages. Entre le background d’Indien Spark, une expédition de charnière, grosso modo, correspond aux enregistrements de double blocs de occasion (appelons-les left et right) sur la séance de maints critères. Une charnière spatio-temporelle implique des enregistrements correspondants à cause left et right basé sur les horodatages, et alors une accord faux des horodatages notoire, il est éternellement rentable de rassembler left et right ultérieur l’une des états-majors temporelles suivantes :

  1. Dévisager croupe : si un décision de left a un horodatage tplus il est mis en accord alors ceux-ci de right lesquels l’horodatage le davantage débours est assistant ou identique à t.
  2. Verso l’postérieur : si un décision de left a un horodatage t, plus il est mis en accord alors ceux-ci de right tenant le davantage courtaud horodatage aérien ou identique à (ou tour à tour, seulement aérien à) t.

Exclusivement, il n’est fréquemment pas rentable de analyser double horodatages quand “correspondants” s’ils sont beaucoup éloignés. Par logique, une pression annexe sur la temps maximale vers contempler en emprunt ou en auparavant écho éternellement autant paragraphe d’une expédition de charnière ASOF.

Entre sparklyr.flint 0.2, toutes les fonctionnalités de charnière ASOF de Flint sont accessibles via le asof_join() errements. Par archétype, incarnant donné 2 RDD de séries temporelles left et right:

library(sparklyr)
library(sparklyr.flint)

sc <- spark_connect(master = "régional")
left <- copy_to(sc, tibble::tibble(t = seq(10), u = seq(10))) %>%
  from_sdf(is_sorted = TRUE, time_unit = "SECONDS", time_column = "t")
right <- copy_to(sc, tibble::tibble(t = seq(10) + 1, v = seq(10) + 1L)) %>%
  from_sdf(is_sorted = TRUE, time_unit = "SECONDS", time_column = "t")

Ce qui suit imprime le aboutissant de la accord de tout décision de left alors le(s) nouveau(s) décision(s) de right qui ont au davantage 1 instant de refus.

print(asof_join(left, right, tol = "1s", férule = ">=") %>% to_sdf())

## # Début: spark<?> (?? x 3)
##    time                    u     v
##    <dttm>              <int> <int>
##  1 1970-01-01 00:00:01     1    NA
##  2 1970-01-01 00:00:02     2     2
##  3 1970-01-01 00:00:03     3     3
##  4 1970-01-01 00:00:04     4     4
##  5 1970-01-01 00:00:05     5     5
##  6 1970-01-01 00:00:06     6     6
##  7 1970-01-01 00:00:07     7     7
##  8 1970-01-01 00:00:08     8     8
##  9 1970-01-01 00:00:09     9     9
## 10 1970-01-01 00:00:10    10    10

Lorsque que si les gens changeons la férule spatio-temporelle en “<", comme tout décision de left seront appariés alors n’importe quoi(s) décision(s) de right qui est seulement à cause le postérité et qui a au davantage 1 instant d’provision sur le performance avant-gardiste de left:

print(asof_join(left, right, tol = "1s", férule = "<") %>% to_sdf())

## # Début: spark<?> (?? x 3)
##    time                    u     v
##    <dttm>              <int> <int>
##  1 1970-01-01 00:00:01     1     2
##  2 1970-01-01 00:00:02     2     3
##  3 1970-01-01 00:00:03     3     4
##  4 1970-01-01 00:00:04     4     5
##  5 1970-01-01 00:00:05     5     6
##  6 1970-01-01 00:00:06     6     7
##  7 1970-01-01 00:00:07     7     8
##  8 1970-01-01 00:00:08     8     9
##  9 1970-01-01 00:00:09     9    10
## 10 1970-01-01 00:00:10    10    11

Notez lesquelles que paradoxe la férule spatio-temporelle sélectionnée, une charnière aspect rustaud est éternellement effectuée (c’est-à-dire, toutes les droits d’horodatage et u droits de left d’en escarpé sera éternellement libéralité à cause la virée, et le v cippe à cause la virée contiendra NA tout jour qu’il n’y a pas d’décision de right qui répond aux critères d’accouplement).

Reflux MCO

Toi-même vous-même demandez éventuellement si la interprétation de cette fonctionnalité à cause Flint est davantage ou moins égal à lm() à cause R. Il s’avère qu’il a détenir davantage à proposer que lm() écho. Une retrait OLS à cause Flint calculera des métriques utiles analogues que le modèle d’demande d’Akaike et le modèle d’demande bayésien, qui sont complets double utiles à des fins de préférence de modèle, et les lithiase des double sont parallélisés par Flint vers prétexter tout à fait la ardeur de réticence abandonné à cause un cluster Spark. De davantage, Flint prend en convenu l’incompétence des régresseurs qui sont universels ou alentour universels, ce qui devient rentable lorsqu’un solution d’interception est interprété. Verso référer à conséquemment c’est le cas, les gens nécessitons analyser laconiquement l’dessein de la retrait OLS, qui est de localiser un vecteur cippe de coefficients (mathbf{beta}) qui minimise (|mathbf{y} – mathbf{X} mathbf{beta}|^2)(mathbf{y}) est le vecteur cippe des variables de réfutation, et (mathbf{X}) est une modèle exposée de colonnes de régresseurs davantage une cippe pleine de (1)s mandataire les termes d’interception. La leçon à ce complication est (mathbf{beta} = (mathbf{X}^intercalmathbf{X})^{-1}mathbf{X}^intercalmathbf{y})en croyant la modèle de Gram (mathbf{X}^intercalmathbf{X}) est non inhabituel. Néanmoins, si (mathbf{X}) contient une cippe de complets (1)s de termes d’interception, et une divers cippe formée par un régresseur dieu (ou alentour), plus des colonnes de (mathbf{X}) sera linéairement moindre (ou alentour) et (mathbf{X}^intercalmathbf{X}) sera inhabituel (ou alentour), ce qui remarqué un complication de réticence. Exclusivement, si un régresseur est dieu, il pommette totalement le même vertu que les termes d’interception. Ainsi, en excluant naturellement un tel régresseur dieu à cause (mathbf{X}) résout le complication. De davantage, en bavard d’revenir en arrière la modèle de Gram, les lecteurs qui se souviennent du notion de « multitude de particularité » de l’examen cardinal doivent se sonder hein le réticence (mathbf{beta} = (mathbf{X}^intercalmathbf{X})^{-1}mathbf{X}^intercalmathbf{y}) pourrait personne arithmétiquement apathique si (mathbf{X}^intercalmathbf{X}) a un abondant chiffre de exploratoire. C’est conséquemment Flint génère autant le chiffre de exploratoire de la modèle de Gram à cause le aboutissant de la retrait OLS, de acabit que l’on puisse établir que le complication de dépréciation rectangle subjacent en classe de conseil est détenir mis en condition.

Ainsi, vers synthétiser, la fonctionnalité de retrait OLS implémentée à cause Flint prête non strictement la leçon au complication, cependant calcule autant des métriques utiles qui aident les scientifiques des occasion à arbitrer la vérité et la autorité prédictive du modèle produit.

Verso référer à la retrait OLS en fonctionnement alors sparklyr.flinton peut tenter l’archétype ultérieur :

mtcars_sdf <- copy_to(sc, mtcars, overwrite = TRUE) %>%
  dplyr::mutate(time = 0L)
mtcars_ts <- from_sdf(mtcars_sdf, is_sorted = TRUE, time_unit = "SECONDS")
model <- ols_regression(mtcars_ts, mpg ~ hp + wt) %>% to_sdf()

print(model %>% dplyr::select(akaikeIC, bayesIC, cond))

## # Début: spark<?> (?? x 3)
##   akaikeIC bayesIC    cond
##      <dbl>   <dbl>   <dbl>
## 1     155.    159. 345403.

# ^ produit says exploratoire number of the Gram matrix was within reason

et impétrer (mathbf{beta})le vecteur des coefficients idéaux, alors :

print(model %>% dplyr::gilet(beta))

## ((1))
## (1) -0.03177295 -3.87783074

Résumés supplémentaires

L’EWMA (norme leste pondérée exponentielle), la demi-vie de l’EMA et les résumés de hasard standardisés (à civilisation l’dissymétrie et l’affront) conséquemment que plusieurs hétérogènes qui manquaient à cause sparklyr.flint 0.1 sont désormais totalement emmanché en convenu à cause sparklyr.flint 0.2.

Meilleure unification alors sparklyr

Lorsque que sparklyr.flint 0.1 interprété un collect() errements d’transit de occasion d’un RDD de séries chronologiques Flint pied une noué de occasion R, il n’avait pas de errements synonyme vers détacher la noué de occasion Spark sous-jacente d’un RDD de séries chronologiques Flint. C’réalisait directement un manque. Entre sparklyr.flint 0.2, on peut gueuler to_sdf() sur un RDD de séries chronologiques vers percevoir une noué de occasion Spark possible à cause sparklyr (par archétype, quand le analyse model %>% to_sdf() %>% dplyr::select(...) exemples plus haut). On peut autant ratifier à la fondement d’appareil JVM du cantine de occasion Spark subjacent en appelant spark_dataframe() sur un RDD de séries chronologiques Flint (ceci est éternellement inefficace à cause la prolixe manumission des sparklyr cas d’manipulation malheureusement).

Résultat

Certains avons présenté un couru multitude de nouvelles fonctionnalités et améliorations introduites à cause sparklyr.flint 0.2 et fouillé à cause maints d’convaincu eux à cause ce ticket de blog. Certains à condition que vous-même êtes itou émoustillé à à eux matière que les gens le sommeils.

Remerciement d’empressé lu!

Déclaration

L’constructeur tient à congédier Mara (@batpigandme), Sigrid (@skeydan) et Javier (@javierluraschi) vers à eux géniaux contributions éditoriales sur cet agence de blog !

By nsmaat