Mam ramkę danych z kolumną jako ciągiem. Chciałem zmienić typ kolumny na Double type w PySpark.
Oto droga, którą zrobiłem:
toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
Chciałem tylko wiedzieć, czy to właściwy sposób, aby to zrobić, ponieważ podczas przechodzenia przez regresję logistyczną dostaję jakiś błąd, więc zastanawiam się, czy to jest przyczyna kłopotów.
python
apache-spark
dataframe
pyspark
apache-spark-sql
Abhishek Choudhary
źródło
źródło
col
funkcji również działa.from pyspark.sql.functions import col
,changedTypedf = joindf.withColumn("label", col("show").cast(DoubleType()))
Zachowaj nazwę kolumny i unikaj dodawania dodatkowych kolumn, używając tej samej nazwy co kolumna wejściowa:
changedTypedf = joindf.withColumn("show", joindf["show"].cast(DoubleType()))
źródło
from pyspark.sql.types import IntegerType for ftr in ftr_list: df = df.withColumn(f, df[f].cast(IntegerType()))
Podane odpowiedzi wystarczą, aby uporać się z problemem, ale chcę podzielić się innym sposobem, który może być wprowadzony w nowej wersji Sparka (nie jestem tego pewien) więc udzielona odpowiedź tego nie złapała.
Do kolumny w instrukcji spark docieramy ze
col("colum_name")
słowem kluczowym:from pyspark.sql.functions import col , column changedTypedf = joindf.withColumn("show", col("show").cast("double"))
źródło
wersja pyspark:
df = <source data> df.printSchema() from pyspark.sql.types import * # Change column type df_new = df.withColumn("myColumn", df["myColumn"].cast(IntegerType())) df_new.printSchema() df_new.select("myColumn").show()
źródło
rozwiązanie było proste -
toDoublefunc = UserDefinedFunction(lambda x: float(x),DoubleType()) changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
źródło