У меня есть dataframe со столбцом как String. Я хотел изменить тип столбца на тип Double в PySpark.
Я сделал следующее:
toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
Просто хотел знать, правильный ли это способ сделать это, поскольку при выполнении логистической регрессии я получаю некоторую ошибку, поэтому мне интересно, является ли это причиной проблемы.
python
apache-spark
dataframe
pyspark
apache-spark-sql
Абхишек Чоудхари
источник
источник
col
функции также работает.from pyspark.sql.functions import col
,changedTypedf = joindf.withColumn("label", col("show").cast(DoubleType()))
Сохраните имя столбца и избегайте добавления дополнительных столбцов, используя то же имя, что и входной столбец:
changedTypedf = joindf.withColumn("show", joindf["show"].cast(DoubleType()))
источник
from pyspark.sql.types import IntegerType for ftr in ftr_list: df = df.withColumn(f, df[f].cast(IntegerType()))
Данных ответов достаточно для решения проблемы, но я хочу поделиться другим способом, которым может быть представлена новая версия Spark (я не уверен в этом), поэтому данный ответ не уловил его.
Мы можем добраться до столбца в операторе искры с помощью
col("colum_name")
ключевого слова:from pyspark.sql.functions import col , column changedTypedf = joindf.withColumn("show", col("show").cast("double"))
источник
версия 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()
источник
решение было простым -
toDoublefunc = UserDefinedFunction(lambda x: float(x),DoubleType()) changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
источник