2015-08-29 15 views
25

Mam ramkę danych z kolumną jako String. Chciałem zmienić typ kolumny na Podwójny typ w pyspark.jak zmienić kolumnę Dataframe z typu String na Double type w pyspark

Po to droga, zrobiłem, -

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

Chciałem tylko wiedzieć, czy to jest właściwy sposób, aby to zrobić, jak podczas biegu przez regresja logistyczna, ja dostaję jakiś błąd, więc Zastanawiam się, jest to powód kłopotów.

Odpowiedz

47

Nie ma potrzeby na UDF tutaj. Column już zapewnia cast method z DataType przykład:

from pyspark.sql.types import DoubleType 

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

lub krótki łańcuch:

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

rozwiązanie było proste -

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

Zachowaj nazwę kolumny i uniknąć dodatkowego dodanie kolumny stosując taką samą nazwę jak kolumna danych wejściowych:

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

Dzięki szukałem jak zachować oryginalną nazwę kolumny – javadba

+0

jest jakaś lista gdzieś od Spark typy danych krótki ciąg wskaże? – alfredox

0

Podane odpowiedzi wystarczą, aby poradzić sobie z problemem, ale chcę podzielić się innym sposobem, który może zostać wprowadzony do nowej wersji. f Spark (Nie mam pewności co do tego) więc podana odpowiedź go nie złapała.

Możemy dotrzeć kolumny w oświadczeniu zapłonowej z col("colum_name") słowa kluczowego:

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

Otrzymałem komunikat o błędzie: Obiekt "str" ​​nie ma atrybutu "rzut" – Jie

Powiązane problemy