En este artículo, vamos a ver cómo cambiar el tipo de columna del marco de datos pyspark.
Creando dataframe para demostración:
Python
# Create a spark session from pyspark.sql import SparkSession spark = SparkSession.builder.appName('SparkExamples').getOrCreate() # Create a spark dataframe columns = ["Name", "Course_Name", "Duration_Months", "Course_Fees", "Start_Date", "Payment_Done"] data = [ ("Amit Pathak", "Python", 3, 10000, "02-07-2021", True), ("Shikhar Mishra", "Soft skills", 2, 8000, "07-10-2021", False), ("Shivani Suvarna", "Accounting", 6, 15000, "20-08-2021", True), ("Pooja Jain", "Data Science", 12, 60000, "02-12-2021", False), ] course_df = spark.createDataFrame(data).toDF(*columns) # View the dataframe course_df.show()
Producción:
Veamos el esquema de dataframe:
Python
# View the column datatypes course_df.printSchema()
Producción:
Método 1: Usar DataFrame.withColumn()
DataFrame.withColumn(colName, col) devuelve un nuevo DataFrame agregando una columna o reemplazando la columna existente que tiene el mismo nombre.
Haremos uso del método cast(x, dataType) para convertir la columna a un tipo de datos diferente. Aquí, el parámetro «x» es el nombre de la columna y dataType es el tipo de datos en el que desea cambiar la columna respectiva.
Ejemplo 1: cambiar el tipo de datos de columnas individuales.
Python
# Cast Course_Fees from integer type to float type course_df2 = course_df.withColumn("Course_Fees", course_df["Course_Fees"] .cast('float')) course_df2.printSchema()
Producción:
root |-- Name: string (nullable = true) |-- Course_Name: string (nullable = true) |-- Duration_Months: long (nullable = true) |-- Course_Fees: float (nullable = true) |-- Start_Date: string (nullable = true) |-- Payment_Done: boolean (nullable = true)
En el ejemplo anterior, podemos observar que el tipo de datos de la columna «Course_Fees» se cambia a flotante desde largo.
Ejemplo 2: cambiar el tipo de datos de varias columnas.
Python
# We can also make use of datatypes from # pyspark.sql.types from pyspark.sql.types import StringType, DateType, FloatType course_df3 = course_df \ .withColumn("Course_Fees" , course_df["Course_Fees"] .cast(FloatType())) \ .withColumn("Payment_Done", course_df["Payment_Done"] .cast(StringType())) \ .withColumn("Start_Date" , course_df["Start_Date"] .cast(DateType())) \ course_df3.printSchema()
Producción:
root |-- Name: string (nullable = true) |-- Course_Name: string (nullable = true) |-- Duration_Months: long (nullable = true) |-- Course_Fees: float (nullable = true) |-- Start_Date: date (nullable = true) |-- Payment_Done: string (nullable = true)
En el ejemplo anterior, cambiamos el tipo de datos de las columnas «Course_Fees», «Payment_Done» y «Start_Date» a «float», «str» y «datetype» respectivamente.
Método 2: Usar DataFrame.select()
Aquí usaremos la función select(), esta función se usa para seleccionar las columnas del marco de datos
Sintaxis: dataframe.select(columnas)
Donde dataframe es el dataframe de entrada y las columnas son las columnas de entrada
Ejemplo 1: Cambiar una sola columna.
Convirtamos el `course_df3` de la estructura del esquema anterior, de vuelta al esquema original.
Python
from pyspark.sql.types import StringType, BooleanType, IntegerType course_df4 = course_df3.select( course_df3.Name, course_df3.Course_Name, course_df3.Duration_Months, (course_df3.Course_Fees.cast(IntegerType())) .alias('Course_Fees'), (course_df3.Start_Date.cast(StringType())) .alias('Start_Date'), (course_df3.Payment_Done.cast(BooleanType())) .alias('Payment_Done'), ) course_df4.printSchema()
Producción:
root |-- Name: string (nullable = true) |-- Course_Name: string (nullable = true) |-- Duration_Months: long (nullable = true) |-- Course_Fees: integer (nullable = true) |-- Start_Date: string (nullable = true) |-- Payment_Done: boolean (nullable = true)
Ejemplo 2: cambiar varias columnas al mismo tipo de datos.
Python
# Changing datatype of all the columns # to string type from pyspark.sql.types import StringType course_df5 = course_df.select( [course_df.cast(StringType()) .alias(c) for c in course_df.columns] ) course_df5.printSchema()
Producción:
root |-- Name: string (nullable = true) |-- Course_Name: string (nullable = true) |-- Duration_Months: string (nullable = true) |-- Course_Fees: string (nullable = true) |-- Start_Date: string (nullable = true) |-- Payment_Done: string (nullable = true)
Ejemplo 3: cambiar varias columnas a los diferentes tipos de datos.
Usemos `course_df5` que tiene todo el tipo de columna como `string`. Cambiaremos los tipos de columna a un formato respectivo.
Python
from pyspark.sql.types import ( StringType, BooleanType, IntegerType, FloatType, DateType ) coltype_map = { "Name": StringType(), "Course_Name": StringType(), "Duration_Months": IntegerType(), "Course_Fees": FloatType(), "Start_Date": DateType(), "Payment_Done": BooleanType(), } # course_df6 has all the column # types as string course_df6 = course_df5.select( [course_df5.cast(coltype_map) .alias(c) for c in course_df5.columns] ) course_df6.printSchema()
Producción:
root |-- Name: string (nullable = true) |-- Course_Name: string (nullable = true) |-- Duration_Months: integer (nullable = true) |-- Course_Fees: float (nullable = true) |-- Start_Date: date (nullable = true) |-- Payment_Done: boolean (nullable = true)
Método 3: Usar spark.sql()
Aquí usaremos tipo.
Sintaxis: spark.sql(“Consulta sql”)
Ejemplo: uso de spark.sql()
Python
# course_df5 has all the column datatypes as string course_df5.createOrReplaceTempView("course_view") course_df7 = spark.sql(''' SELECT Name, Course_Name, INT(Duration_Months), FLOAT(Course_Fees), DATE(Start_Date), BOOLEAN(Payment_Done) FROM course_view ''') course_df7.printSchema()
Producción:
root |-- Name: string (nullable = true) |-- Course_Name: string (nullable = true) |-- Duration_Months: integer (nullable = true) |-- Course_Fees: float (nullable = true) |-- Start_Date: date (nullable = true) |-- Payment_Done: boolean (nullable = true)
Publicación traducida automáticamente
Artículo escrito por apathak092 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA