0
votes

Comment traiter avec plusieurs formats de date? Spark - Scala

J'ai des données dans JSON comme ceci xxx

où j'ai plusieurs formats de date dans le champ "version_date" comme < Code> 26-mar-99 ou 1963-01-01 ou 4-juillet 08

J'ai du code de travail < / p> xxx

mais la sortie xxx

lorsque le format de date est comme "18 oct-oct-06" Cela fonctionne bien, mais lorsque le format de date est différent, il montre NULLS.

Pour afficher toutes les dates sans nulls, comment pourrais-je faire cela de manière simple et élégante?

Merci d'avance.


0 commentaires

3 Réponses :


2
votes

C'est parce que to_date (col ("version_date"), "dd-mmm-yy") . Ici, vous fournissez un format de date d'entrée et il se lit correctement si le format de date JSON correspond à cela. Sinon, il serait nul

Vous devez maintenant lire le texte de la date de JSON avec tous les formats de date possibles.

écrire un UDF. Passez le texte de la date comme entrée. Dans UDF, vérifiez que le format de date possible et si correspondez, renvoyez l'objet de date approprié. UDF est certainement utile ici


0 commentaires

3
votes

Dans tous les cas, vous devez avoir la liste finie du format de date que vous avez dans le fichier pour version_date code> ou que vous souhaitez prendre en charge dans le traitement.

Vous pouvez écrire udf pour analyser la chaîne de date code> en utilisant la méthode ci-dessous - p> xxx pré>

ou utilisez coalesce code> p>

val dt_formats= Seq("dd-MMM-yyyy", "MMM-dd-yyyy", "yyyy-MM-dd","MM/dd/yy","dd-MM-yy","dd-MM-yyyy","yyyy/MM/dd","dd/MM/yyyy")

val newDF =  df.withColumn("Actual_Release", coalesce(dt_formats.map(fmt => to_date($"Release_Date", fmt)):_*))


0 commentaires

0
votes

Vous pouvez essayer quelque chose comme ça, je ne sais pas s'il est élégant mais simple, c'est le cas: xxx


0 commentaires