2015-08-29 14 views
25

Ho un dataframe con colonna come String. Volevo cambiare il tipo di colonna in Double type in pyspark.come modificare una colonna Dataframe da String type a Double type in pyspark

seguito è il modo, l'ho fatto, -

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

Volevo solo sapere, è questo il modo giusto per farlo, come durante l'esecuzione attraverso regressione logistica, io sono sempre un po 'di errori, in modo da Mi chiedo, è questa la ragione del problema.

risposta

47

Non v'è alcuna necessità di un UDF qui. Column fornisce già cast method con DataType esempio:

from pyspark.sql.types import DoubleType 

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

o breve stringa:

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

la soluzione era semplice -

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

conservano il nome della colonna ed evitare aggiunta colonna supplementare utilizzando lo stesso nome di colonna di input:

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

Grazie ero alla ricerca di come mantenere originale nome di colonna – javadba

+0

c'è un elenco da qualche parte dei tipi di dati a breve stringa Spark identificherà? – alfredox

0

Date le risposte sono sufficienti per affrontare il problema ma voglio condividere un altro modo che può essere introdotto la nuova versione o f Spark (Non ne sono sicuro) quindi la risposta data non lo ha catturato.

Siamo in grado di raggiungere colonna nella dichiarazione scintilla con col("colum_name") parola chiave:

from pyspark.sql.functions import col , column 
changedTypedf = joindf.withColumn("show", col("show".cast("double")) 
+0

Ho ricevuto un messaggio di errore: L'oggetto "str" ​​non ha attributo "cast" – Jie