¿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.
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:dfs[1].printSchema()
root
|– D: double (nullable = true)
|– timestamp: long (nullable = true)
|– mode: string (nullable = true)
“`