我想计算Days_btwn_Shpmnt,它只是发货日期之间的天数。需要在第一和第二条记录中计算这一点,等等。
你能帮我解决一下使用Spark / Scala的方法吗?
谢谢, 乔
答案 0 :(得分:1)
您可以使用spark中的lag
函数完成此操作。示例脚本显示了它是如何完成的。请注意,日期必须采用yyyy-mm-dd
格式datediff
格式设置。
import org.apache.spark.sql.functions._
import org.apache.spark.sql.expressions.Window
val df = Seq((1000, "2016-01-19"), (1000, "2016-02-12"), (1000, "2016-02-18"), (1000, "2016-02-04")).toDF("product_id", "date")
val result = df.withColumn("last_date" ,lag("date", 1).over(Window.partitionBy($"product_id").orderBy($"date"))).withColumn("daysToShipMent", datediff($"date", $"last_date"))
scala> result.select("product_id", "date", "daysToShipMent" ).show()
+----------+----------+--------------+
|product_id| date|daysToShipMent|
+----------+----------+--------------+
| 1000|2016-01-19| null|
| 1000|2016-02-04| 16|
| 1000|2016-02-12| 8|
| 1000|2016-02-18| 6|
+----------+----------+--------------+