es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo puedo obtener el tipo de datos original de los valores después de usar f.coalesce en PySpark?

Para mantener los tipos de datos originales, debe cambiar la línea donde utiliza f.coalesce, y en su lugar, utilizar f.when que permitirá validar si la columna contiene valores nulos o no nulos, y asignar el tipo de datos correcto para cada caso. El código corregido sería el siguiente:

def splitdf(df, lista):
splitdf = (df.filter(f.col(‘uniquestring’).isin(lista))
.select(
f.when(f.col(‘stringvalue’).isNull(), f.col(‘numericvalue’)).cast(‘double’).alias(lista),
f.col(‘timestamp’),
f.col(‘mode’)
))
return splitdf

dfs = [splitdf(df, lista) for lista in list]

Este código utilizará f.when para verificar si la columna ‘stringvalue’ es nula. Si es nula, asignará el tipo de datos ‘double’ para la columna ‘numericvalue’. De lo contrario, mantendrá el tipo de datos original para la columna ‘stringvalue’. Esta corrección permitirá mantener los tipos de datos originales en el DataFrame resultante.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Puedes usar la función selectExpr para mantener los tipos de datos originales. Esta función te permite especificar el tipo de dato de cada columna. Por ejemplo, puedes usar el siguiente código para mantener los tipos de datos originales de las columnas:

    def split_df(df, lista):
        split_df = (df.filter(
                    f.col('listname') == lista)
                    .selectExpr(
                    "coalesce(string(value), double(value)) as {lista}, timestamp, mode"
                   ))
                   return split_df
    
    dfs = [split_df(df, lista) for id in lista]
    
    Ahora, los tipos de datos de las columnas se mantendrán:
    

    dfs[1].printSchema()

    root
    |– D: double (nullable = true)
    |– timestamp: long (nullable = true)
    |– mode: string (nullable = true)
    “`

Comments are closed.