2016-04-29 11 views
12

Ho un dataframe che ha due colonne (C, D) sono definite come tipo di colonna di stringhe, ma i dati nelle colonne sono effettivamente date. per esempio la colonna C ha la data come "01-APR-2015" e la colonna D come "20150401" Voglio cambiare questi per il tipo di colonna data, ma non ho trovato un buon modo per farlo. Osservo l'overflow dello stack Ho bisogno di convertire il tipo di colonna di stringhe nel tipo di colonna Date in DataFrame di Spark SQL. il formato della data può essere "01-APR-2015" e guardo this post ma non ha avuto informazioni riferiscono ad oggiCome modificare il tipo di colonna da String a Date in DataFrames?

risposta

30

Spark> = 2.2

È possibile utilizzare to_date:

import org.apache.spark.sql.functions.{to_date, to_timestamp} 

df.select(to_date($"ts", "dd-MMM-yyyy").alias("date")) 

o to_timestamp:

df.select(to_date($"ts", "dd-MMM-yyyy").alias("timestamp")) 

con intermedia unix_timestamp chiamata.

Spark < 2,2

Dal Spark 1.5 è possibile utilizzare unix_timestamp funzione per analizzare la stringa a lungo, gettarlo ai timestamp e troncare to_date:

import org.apache.spark.sql.functions.{unix_timestamp, to_date} 

val df = Seq((1L, "01-APR-2015")).toDF("id", "ts") 

df.select(to_date(unix_timestamp(
    $"ts", "dd-MMM-yyyy" 
).cast("timestamp")).alias("timestamp")) 

Nota:

A seconda della versione di Spark, potrebbe essere necessario apportare alcune modifiche a causa di SPARK-11724 :

La trasmissione da tipi interi a timestamp considera la sorgente int come in millis. Il cast da timestamp a tipi interi crea il risultato in secondi.

Se si utilizza senza patch versione unix_timestamp uscita richiede la moltiplicazione per 1000.

+0

mia modifica è stata respinta ma sono abbastanza sicuro che ci sia un "}" manca nella vostra prima linea di importazione e ha scritto "to_date" invece di "to_timestamp" linea 7 – Fabich

Problemi correlati