En este artículo, veremos cómo agregar columnas basadas en otra columna al marco de datos de Pyspark.
Creando Dataframe para demostración:
Aquí vamos a crear un marco de datos a partir de una lista del conjunto de datos dado.
Python3
# Create a spark session from pyspark.sql import SparkSession spark = SparkSession.builder.appName('SparkExamples').getOrCreate() # Create a spark dataframe columns = ["Name", "Course_Name", "Months", "Course_Fees", "Discount", "Start_Date", "Payment_Done"] data = [ ("Amit Pathak", "Python", 3, 10000, 1000, "02-07-2021", True), ("Shikhar Mishra", "Soft skills", 2, 8000, 800, "07-10-2021", False), ("Shivani Suvarna", "Accounting", 6, 15000, 1500, "20-08-2021", True), ("Pooja Jain", "Data Science", 12, 60000, 900, "02-12-2021", False), ] df = spark.createDataFrame(data).toDF(*columns) # View the dataframe df.show()
Producción:
Método 1: Usando withColumns()
Se utiliza para cambiar el valor, convertir el tipo de datos de una columna existente, crear una nueva columna y mucho más.
Sintaxis: df.withColumn(colName, col)
Devuelve: una nueva :class:`DataFrame` agregando una columna o reemplazando la columna existente que tiene el mismo nombre.
Python3
new_df = df.withColumn('After_discount', df.Course_Fees - df.Discount) new_df.show()
Producción:
Método 2: Usar consulta SQL
Aquí usaremos la consulta SQL dentro de Pyspark. Crearemos una vista temporal de la tabla con la ayuda de createTempView() y la vida de esta temperatura depende de la vida de la sparkSession. registerTempTable() creará la tabla temporal si no está disponible o si está disponible, entonces reemplácela.
Luego, después de crear la tabla, seleccione la tabla por cláusula SQL que tomará todos los valores como una string.
Python3
df.registerTempTable('table') newDF = spark.sql('select *, Course_Fees - Discount as Total from table') newDF.show()
Producción:
Método 3: Usar UDF
En este método, definiremos que el usuario defina una función que tomará dos parámetros y devolverá el precio total. Esta función nos permite crear una nueva función según nuestros requisitos.
Ahora definimos el tipo de datos de la función UDF y creamos las funciones que devolverán los valores, que es la suma de todos los valores en la fila.
Python3
# import the functions as F from pyspark.sql import pyspark.sql.functions as F from pyspark.sql.types import IntegerType # define the sum_col def Total(Course_Fees, Discount): res = Course_Fees - Discount return res # integer datatype is defined new_f = F.udf(Total, IntegerType()) # calling and creating the new # col as udf_method_sum new_df = df.withColumn( "Total_price", new_f("Course_Fees", "Discount")) # Showing the Dataframe new_df.show()
Producción:
Publicación traducida automáticamente
Artículo escrito por kumar_satyam y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA