E 'possibile fare questo senza un UDF (preferibile?):
> from pyspark.sql.functions import unix_timestamp
> df = spark.createDataFrame([("11/25/1991",), ("11/24/1991",), ("11/30/1991",)], ['date_str'])
> df2 = df.select('date_str', from_unixtime(unix_timestamp('date_str', 'MM/dd/yyy')).alias('date'))
> df2
DataFrame[date_str: string, date: timestamp]
> df2.show()
+----------+--------------------+
| date_str| date|
+----------+--------------------+
|11/25/1991|1991-11-25 00:00:...|
|11/24/1991|1991-11-24 00:00:...|
|11/30/1991|1991-11-30 00:00:...|
+----------+--------------------+
Aggiornamento (2018/01/10) :
Il modo migliore per eseguire questa operazione è probabilmente l'uso di to_date
o to_timestamp
, che supportano entrambi l'argomento format
. Dai documenti:
>>> df = spark.createDataFrame([('1997-02-28 10:30:00',)], ['t'])
>>> df.select(to_timestamp(df.t, 'yyyy-MM-dd HH:mm:ss').alias('dt')).collect()
[Row(dt=datetime.datetime(1997, 2, 28, 10, 30))]
A meno che non si sta utilizzando uno dei addons TimeSeriesRDD (vedi la conferenza Spark 2016 per qualche discussione, ci sono due che conosco, ma entrambi sono ancora in fase di sviluppo), non ci non sono molti ottimi strumenti per le serie temporali. Di conseguenza, ho scoperto che raramente c'è un motivo per disturbare la conversione di stringhe in oggetti datetime, se il tuo obiettivo è un verosimile tipo di operazioni di "groupBy" o ricampionamento. Eseguili semplicemente sulle colonne degli archi. – Jeff
L'analisi sarà fatta usando poco o nulla '' 'groupBy''' ma piuttosto studi longitudinali di cartelle cliniche. Quindi essere in grado di manipolare la data è importante – Jenks
Possibile duplicato di [Perché ottengo risultati nulli dalla data \ _format() funzione PySpark?] (Http://stackoverflow.com/questions/36094413/why-i-get-null- result-from-date-format-pyspark-function) –