2017-07-04 3 views
1

J'ai deux champs de java.sql.timestamp de type dans mon dataframe et je veux trouver le nombre de jours entre ces deux colonnescomment obtenir le nombre de jours entre deux champ de scala dans

est Ci-dessous le format de mes données: * 2016-12-23 23: 56: 02.0 (aaaa-MM-jj HH: mm: ss.S)

J'avais essayé beaucoup de méthode mais n'ai trouvé aucune solution. Alors quelqu'un peut-il aider ici.

+1

Votre le format ressemble plus à "aaaa-MM-jj HH: mm: ss.S". –

+0

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 –

+0

oui .. vous êtes format mu est AAAA-MM-JJ HH: mm: ss.s. Je l'ai fait les changements dans ma question –

Répondre

0

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| 
+---+------------------+ 
+0

méthode datediff nécessite la colonne mais je rencontre des champs Donc, dans mon cas, il ne fonctionne pas .. ci-dessous est les détails où je suis à deux champs et que vous voulez la différence de jours entre ces deux domaines. val firstDate: java.sql.TimeStamp = 2016-12-23 23: 56: 02.0 val secondDate: java.sql.TimeStamp = 2017-12-23 23: 56: 02.0 Je veux le nombre de jours entre ces deux dates –

+0

Qu'est-ce qui vous empêche de travailler avec des colonnes? – stefanobaghino

+0

Quand je donne le nom de la variable que je reçois l'erreur ci-dessous : 291: erreur: incompatibilité de type; trouvé: java.sql.Timestamp requis: org.apache.spark.sql.Column val diffOfDays = datediff (firstDate, secDate) –