Il est possible (à préférer?) pour ce faire, sans un udf:
> 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:...|
+----------+--------------------+
Mise à jour (1/10/2018):
Pour Spark 2.2+ la meilleure façon de le faire est probablement à l'aide de l' to_date
ou to_timestamp
fonctions qui prennent en charge l' format
argument. À partir de la documentation:
>>> 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))]