2017-10-11 1 views
1

Salut J'ai l'élément de données avec deux colonnes de chaîne c1dt et c2tm et son format est yyyymmdd et yyyymmddTHHmmss.SSSz respectivement. Maintenant, je veux convertir ces colonnes en colonnes de type date et type d'horodatage et j'ai essayé ce qui suit, mais ça ne marche pas cela montre que les valeurs des colonnes sont nulles. Lorsque j'appelle newdf.show, les valeurs des deux colonnes s'affichent comme nulles lorsque j'appelle newdf.show. Si j'imprime l'original dataframe df, je vois les valeurs de date et d'horodatage s'il vous plaît guider. Merci d'avance.Spark DataFrame Chaîne de type de chaîne à Timestamp/Type conversion de colonne de type

Répondre

-1

Étant donné que le format d'horodatage n'est pas le format par défaut, votre meilleur pari est probablement de créer un fichier udf.

def _stringToTs(s: String): Timestamp = { 
    val format = new SimpleDateFormat("yyyymmddTHHmmss.SSSz") 
    val date = format.parse(timestamp) 
    new Timestamp(miliseconds); 
} 
import org.apache.spark.sql.functions.udf 
val stringToTS = udf(_stringToTS) 
val newdf = df.withColumn("c1dt", stringToTS($"c1dt").cast("date").withColumn("c2tm",stringToTS($"c2tm"))) 

Si vous données proviennent d'un fichier CSV vous pouvez spécifier le format d'horodatage avant de charger les données qui sera globalement plus rapide

spark.read 
     .format("csv") 
     .option("inferSchema", "true") // Automatically infer data types 
     .option("timestampFormat", "yyyymmddTHHmmss.SSSz") 
     .load("path")