Spark Fonctions de la Fenêtre - rangeBetween dates
Je vais avoir une Étincelle SQL DataFrame
avec les données et ce que je suis en train d'essayer d'obtenir toutes les lignes qui précèdent ligne en cours sur une période donnée. Ainsi, par exemple, je veux avoir toutes les lignes à partir de 7 jours précédant la ligne de donnée. J'ai compris j'ai besoin d'utiliser un Window Function
comme:
Window \
.partitionBy('id') \
.orderBy('start')
et c'est là le problème. Je veux avoir un rangeBetween
de 7 jours, mais il n'y a rien dans l'Étincelle docs que j'ai pu trouver sur ce. Ne Étincelle même de fournir une telle option? Pour l'instant, je suis juste de toutes les lignes précédentes avec:
.rowsBetween(-sys.maxsize, 0)
mais voudrais obtenir quelque chose comme:
.rangeBetween("7 days", 0)
Si quelqu'un pouvait m'aider sur ce que je serai très reconnaissant. Merci à l'avance!
Vous devez vous connecter pour publier un commentaire.
Spark >= 2.3
Depuis Étincelle 2.3 il est possible d'utiliser l'intervalle des objets à l'aide de SQL API, mais la
DataFrame
prise en charge des API est encore en cours de réalisation.Spark < 2.3
Autant que je sache, il n'est pas possible directement, ni Étincelle, ni de la Ruche. Les deux nécessitent
ORDER BY
clause utilisé avecRANGE
être numériques. La chose la plus proche que j'ai trouvé, c'est la conversion de l'horodatage et d'exploitation sur les secondes. En supposant questart
colonne contientdate
type:Une petite aide et de définition de la fenêtre:
Enfin requête:
Loin d'être jolie, mais les travaux.
* La Ruche Manuel Du Langage, Les Types De
scala.MatchError: CalendarIntervalType (of class org.apache.spark.sql.types.CalendarIntervalType$)
Il y a un JIRA problème qui sera résolu dans la version 2.4.0: issues.apache.org/jira/browse/SPARK-25845