Saya memiliki dataframe dengan kolom sebagai String. Saya ingin mengubah tipe kolom menjadi tipe Double di PySpark.
Berikut caranya, saya lakukan:
toDoublefunc = UserDefinedFunction(lambda x: x,DoubleType())
changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
Hanya ingin tahu, apakah ini cara yang tepat untuk melakukannya karena saat menjalankan Regresi Logistik, saya mendapatkan beberapa kesalahan, jadi saya bertanya-tanya, apakah ini alasan masalah.
python
apache-spark
dataframe
pyspark
apache-spark-sql
Abhishek Choudhary
sumber
sumber
col
fungsi tersebut juga berfungsi.from pyspark.sql.functions import col
,changedTypedf = joindf.withColumn("label", col("show").cast(DoubleType()))
Pertahankan nama kolom dan hindari penambahan kolom tambahan dengan menggunakan nama yang sama sebagai kolom input:
changedTypedf = joindf.withColumn("show", joindf["show"].cast(DoubleType()))
sumber
from pyspark.sql.types import IntegerType for ftr in ftr_list: df = df.withColumn(f, df[f].cast(IntegerType()))
Jawaban yang diberikan sudah cukup untuk mengatasi masalah tetapi saya ingin berbagi cara lain yang mungkin memperkenalkan versi baru Spark (saya tidak yakin tentang itu) jadi jawaban yang diberikan tidak menangkapnya.
Kita bisa mencapai kolom di pernyataan percikan dengan
col("colum_name")
kata kunci:from pyspark.sql.functions import col , column changedTypedf = joindf.withColumn("show", col("show").cast("double"))
sumber
versi 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()
sumber
solusinya sederhana -
toDoublefunc = UserDefinedFunction(lambda x: float(x),DoubleType()) changedTypedf = joindf.withColumn("label",toDoublefunc(joindf['show']))
sumber