Conversion de la chaîne PySpark au format de date
Vous disposez d'un DataFrame PySpark avec une colonne de chaîne représentant les dates au format MM-jj-aaaa. Votre tentative de convertir cette colonne en format de date à l'aide de la fonction to_date renvoie des valeurs nulles. Cet article fournit des méthodes pour résoudre ce problème.
Recommandation mise à jour (Spark 2.2) :
Pour les versions Spark 2.2 et supérieures, l'approche préférée consiste à utiliser to_date ou fonctions to_timestamp, qui prennent désormais en charge l'argument format. Cela vous permet de spécifier le format d'entrée et de convertir la colonne de chaîne directement en date ou en horodatage :
from pyspark.sql.functions import to_timestamp 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() # Output: # [Row(dt=datetime.datetime(1997, 2, 28, 10, 30))]
Réponse originale (Spark < 2.2) :
Pour les versions antérieures de Spark, vous pouvez utiliser la méthode suivante sans avoir besoin d'une fonction définie par l'utilisateur (UDF) :
from pyspark.sql.functions import unix_timestamp, from_unixtime 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') ) print(df2) # Output: # DataFrame[date_str: string, date: timestamp] df2.show(truncate=False) # Output: # +----------+-------------------+ # |date_str |date | # +----------+-------------------+ # |11/25/1991|1991-11-25 00:00:00| # |11/24/1991|1991-11-24 00:00:00| # |11/30/1991|1991-11-30 00:00:00| # +----------+-------------------+
Dans cette méthode, unix_timestamp convertit la colonne de chaîne en un horodatage Unix et from_unixtime convertit l'horodatage Unix en une colonne de date.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!