Je ne sais pas, si vous émettez résolu en utilisant la fonction de fenêtre que vous voulez juste de comparer n & n-1 lignes et je ne vois pas l'attribut sur lequel vous voulez regrouper les données. Pour votre besoin décrit, vous pouvez résoudre le problème comme suit:
- Ajoutez l'index à la commande rdd à l'aide de zipWithIndex.
- Créer rdd pour les lignes indexées impaires.
- Créer rdd pour des lignes d'index paires.
- Maintenant, vous pouvez appliquer votre logique sur deux rdds.1
est l'exemple Après travail:
val spark = SparkSession
.builder
.appName("Example")
.master("local[*]")
.getOrCreate()
import spark.implicits._
val customers = spark.sparkContext.parallelize(List(("Alice", "2016-05-01", 50.00),
("Alice", "2016-05-03", 45.00),
("Alice", "2016-05-04", 55.00),
("Bob", "2016-05-01", 25.00),
("Bob", "2016-05-04", 29.00),
("Bob", "2016-05-06", 27.00)))
val custIndexed = customers.zipWithIndex().collect()
val custOdd = custIndexed.filter(record=>record._2%2!=0)
val custEven = custIndexed.filter(record=>record._2%2==0)
Votre df contient seulement deux lignes? Si non, que voulez-vous répondre exactement au vu des données? pls élaborer plus sur le problème car il existe des méthodes planty disponibles –
Non. C'est juste un exemple. Ma DS a beaucoup de lignes. Comme je l'ai mentionné ci-dessus, j'ai besoin de comparer deux dates de deux rangées dans une itération dans Scala et trouver leur différence. –
Vous voulez des "fonctions de fenêtre". Voir, par exemple, https://databricks.com/blog/2015/07/15/introducing-window-functions-in-spark-sql.html –