apache spark - to_date - El dataframe PySpark convierte un formato de cadena inusual a Timestamp
spark sql to date (1)
Spark> = 2.2
from pyspark.sql.functions import to_timestamp
(sc
.parallelize([Row(dt=''2016_08_21 11_31_08'')])
.toDF()
.withColumn("parsed", to_timestamp("dt", "yyyy_MM_dd hh_mm_ss"))
.show(1, False))
## +-------------------+-------------------+
## |dt |parsed |
## +-------------------+-------------------+
## |2016_08_21 11_31_08|2016-08-21 11:31:08|
## +-------------------+-------------------+
Spark <2.2
No es nada que unix_timestamp
no pueda manejar:
from pyspark.sql import Row
from pyspark.sql.functions import unix_timestamp
(sc
.parallelize([Row(dt=''2016_08_21 11_31_08'')])
.toDF()
.withColumn("parsed", unix_timestamp("dt", "yyyy_MM_dd hh_mm_ss")
.cast("double")
.cast("timestamp"))
.show(1, False))
## +-------------------+---------------------+
## |dt |parsed |
## +-------------------+---------------------+
## |2016_08_21 11_31_08|2016-08-21 11:31:08.0|
## +-------------------+---------------------+
Estoy usando PySpark a través de Spark 1.5.0. Tengo un formato de cadena inusual en filas de una columna para valores de fecha y hora. Se parece a esto:
Row[(daytetime=''2016_08_21 11_31_08'')]
¿Hay alguna forma de convertir este formato no ortodoxo yyyy_mm_dd hh_mm_dd
en una marca de tiempo? Algo que eventualmente puede venir a lo largo de las líneas de
df = df.withColumn("date_time",df.daytetime.astype(''Timestamp''))
Pensé que las funciones de Spark SQL como regexp_replace
podrían funcionar, pero por supuesto tengo que reemplazar _
con -
en la mitad de la fecha y _
con :
en la parte del tiempo. Pensaba que podría dividir la columna en 2 usando substring
y contar hacia atrás desde el final del tiempo. Luego haga el ''regexp_replace'' por separado, luego concatenar. Pero esto parece a muchas operaciones? hay una manera mas facil?