cómo cambiar una columna Dataframe de tipo String a tipo Double en pyspark


Tengo un dataframe con columna como cadena. Quería cambiar el tipo de columna a Double type en pyspark.

Seguir es el camino, lo hice,-

toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))

Solo quería saber, es esta la forma correcta de hacerlo mientras se ejecuta a través de la Regresión logística, estoy recibiendo algún error, así que me pregunto , esta es la razón del problema.

Author: zero323, 2015-08-29

4 answers

No hay necesidad de un UDF aquí. Column ya proporciona cast método con DataType instancia:

from pyspark.sql.types import DoubleType

changedTypedf = joindf.withColumn("label", joindf["show"].cast(DoubleType()))

O cadena corta:

changedTypedf = joindf.withColumn("label", joindf["show"].cast("double"))
 73
Author: zero323,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-11 17:45:07

Conserve el nombre de la columna y evite la adición de columnas adicionales usando el mismo nombre que la columna de entrada:

changedTypedf = joindf.withColumn("show", joindf["show"].cast(DoubleType()))
 31
Author: Disha,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-28 14:22:17

La solución era simple -

toDoublefunc = UserDefinedFunction(lambda x: float(x),DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
 2
Author: Abhishek Choudhary,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-08-29 10:31:10

Las respuestas dadas son suficientes para lidiar con el problema, pero quiero compartir otra forma en la que se puede introducir la nueva versión de Spark (no estoy seguro de ello) así que la respuesta dada no lo atrapó.

Podemos llegar a la columna en la instrucción spark con col("colum_name") palabra clave:

from pyspark.sql.functions import col , column
changedTypedf = joindf.withColumn("show", col("show").cast("double"))
 1
Author: serkan kucukbay,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-29 11:25:45