Je regarde la fonction de diapositive de fenêtre pour un Spark DataFrame dans Spark SQL, Scala.
J'ai une trame de données avec les colonnes Col1, Col1, Col1, date.
Col1 Col2 Col3 date volume new_col
201601 100.5
201602 120.6 100.5
201603 450.2 120.6
201604 200.7 450.2
201605 121.4 200.7`
Maintenant, je veux ajouter une nouvelle colonne avec le nom (new_col) avec une ligne glissée vers le bas, comme indiqué ci-dessus.
J'ai essayé l'option ci-dessous pour utiliser la fonction fenêtre.
val windSldBrdrxNrx_df = df.withColumn("Prev_brand_rx", lag("Prev_brand_rx",1))
Quelqu'un peut-il m'aider à faire cela.
Vous faites correctement tout ce que vous avez manqué est over(window expression)
sur lag
val df = sc.parallelize(Seq((201601, 100.5),
(201602, 120.6),
(201603, 450.2),
(201604, 200.7),
(201605, 121.4))).toDF("date", "volume")
val w = org.Apache.spark.sql.expressions.Window.orderBy("date")
import org.Apache.spark.sql.functions.lag
val leadDf = df.withColumn("new_col", lag("volume", 1, 0).over(w))
leadDf.show()
+------+------+-------+
| date|volume|new_col|
+------+------+-------+
|201601| 100.5| 0.0|
|201602| 120.6| 100.5|
|201603| 450.2| 120.6|
|201604| 200.7| 450.2|
|201605| 121.4| 200.7|
+------+------+-------+
Ce code a été exécuté sur Spark Shell 2.0.2
Vous pouvez importer ci-dessous deux packages, ce qui résoudra le problème des dépendances de décalage.
import org.Apache.spark.sql.functions.{lead, lag}
import org.Apache.spark.sql.expressions.Window