La función date_format en Spark muestra resultados nulos.
Tengo una fuente de datos como la siguiente:
order_id,order_date,order_customer_id,order_status
1,2013-07-25 00:00:00.0,11599,CERRADO
2,2013-07-25 00:00:00.0,256,PENDIENTE_PAGO
3,2013-07-25 00:00:00.0,12111,COMPLETO
4,2013-07-25 00:00:00.0,8827,CERRADO
Estoy tratando de convertir a formato mm/dd/yyyy
solo para las órdenes CERRADO
utilizando las siguientes consultas, pero obtengo un resultado nulo. ¿Puede ayudarme a obtener el formato de fecha requerido usando DSL o el método spark sql?
closed_df=ord_df.select(date_format(to_date('order_date','yyyy-mm-dd hh:mm:SS.a'),'mm/dd/yyyy') .\
alias("fecha_formateada")).show()
#output:
|fecha_formateada|
+----------------+
| null|
| null|
ord_df.createOrReplaceTempView("ordenes")
cld_df = spark.sql( """select order_id, date_format(to_date("order_date","yyyy-mm-dd hh:mm:ss.a"),'mm/dd/yyyy') as order_date,\
order_customer_id, order_status \
from ordenes where order_status = 'CERRADO'""").show()
#output:
|order_id|order_date|order_customer_id|order_status|
+--------+----------+-----------------+------------+
| 1| null| 11599| CERRADO|
| 4| null| 8827| CERRADO|
davy.ai
El problema con las consultas proporcionadas es que la función
to_date
espera que el parámetro del formato de fecha coincida con el formato real de la cadena de fecha. En este caso, el formato debería seryyyy-MM-dd HH:mm:ss.SSS
en lugar deyyyy-mm-dd hh:mm:SS.a
oyyyy-mm-dd hh:mm:ss.a
.Para convertir
order_date
al formatomm/dd/yyyy
solo para pedidosCLOSED
, se puede utilizar la siguiente consulta DSL:En esta consulta, la función
filter
se utiliza para seleccionar solo los pedidosCLOSED
. Luego, se aplica la funcióndate_format
a la columnaorder_date
para convertirla al formatoMM/dd/yyyy
, y la columna resultante se llamaformat_date
.Alternativamente, también se puede utilizar la siguiente consulta SQL de Spark:
En esta consulta, se utiliza la función
to_date
con el formato de fecha correcto para convertir la cadenaorder_date
en un objeto de fecha, y luego se aplica la funcióndate_format
para convertirlo al formatoMM/dd/yyyy
. La columna resultante se llamaorder_date
. La cláusulaWHERE
se utiliza para seleccionar solo pedidosCLOSED
.