如何计算Spark / Scala中记录之间的持续时间?

时间:2017-06-15 21:33:28

标签: scala apache-spark

Please see the image of my dataset

我想计算Days_btwn_Shpmnt,它只是发货日期之间的天数。需要在第一和第二条记录中计算这一点,等等。

你能帮我解决一下使用Spark / Scala的方法吗?

谢谢, 乔

1 个答案:

答案 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|
+----------+----------+--------------+