org.apache.spark.sql.functions
est un trésor. Par exemple, il y a la méthode datediff
qui fait exactement ce que vous voulez: here is the ScalaDoc.
Un exemple:
val spark: SparkSession = ??? // your spark session
val sc: SparkContext = ??? // your spark context
import spark.implicits._ // to better work with spark sql
import java.sql.Timestamp
final case class Data(id: Int, from: Timestamp, to: Timestamp)
val ds =
spark.createDataset(sc.parallelize(Seq(
Data(1, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-11 00:00:00")),
Data(2, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-21 00:00:00")),
Data(3, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-23 00:00:00")),
Data(4, Timestamp.valueOf("2017-01-01 00:00:00"), Timestamp.valueOf("2017-01-07 00:00:00"))
)))
import org.apache.spark.sql.functions._
ds.select($"id", datediff($"from", $"to")).show()
En exécutant cet extrait vous finiriez avec la sortie suivante:
+---+------------------+
| id|datediff(from, to)|
+---+------------------+
| 1| -10|
| 2| -20|
| 3| -22|
| 4| -6|
+---+------------------+
Votre le format ressemble plus à "aaaa-MM-jj HH: mm: ss.S". –
ce n'est pas la question en double. dans ce je demande au sujet du format de java.sql.timestamp et la question que vous avez marquée prend au sujet des dates. @ElliottFrisch –
oui .. vous êtes format mu est AAAA-MM-JJ HH: mm: ss.s. Je l'ai fait les changements dans ma question –