En este artículo, discutiremos cómo unir múltiples marcos de datos en PySpark.
Método 1: función Union() en pyspark
La función PySpark union() se usa para combinar dos o más marcos de datos que tienen la misma estructura o esquema. Esta función devuelve un error si el esquema de los marcos de datos difiere entre sí.
Sintaxis: data_frame1.union(data_frame2)
Dónde,
- data_frame1 y data_frame2 son los marcos de datos
Ejemplo 1:
Python3
# Python program to illustrate the # working of union() function import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('GeeksforGeeks.com').getOrCreate() # Creating a dataframe data_frame1 = spark.createDataFrame( [("Bhuwanesh", 82.98), ("Harshit", 80.31)], ["Student Name", "Overall Percentage"] ) # Creating another dataframe data_frame2 = spark.createDataFrame( [("Naveen", 91.123), ("Piyush", 90.51)], ["Student Name", "Overall Percentage"] ) # union() answer = data_frame1.union(data_frame2) # Print the result of the union() answer.show()
Producción:
+------------+------------------+ |Student Name|Overall Percentage| +------------+------------------+ | Bhuwanesh| 82.98| | Harshit| 80.31| | Naveen| 91.123| | Piyush| 90.51| +------------+------------------+
Ejemplo 2:
En este ejemplo, hemos combinado dos marcos de datos, data_frame1 y data_frame2. Tenga en cuenta que el esquema de ambos marcos de datos es diferente. Por lo tanto, la salida no es la deseada, ya que union() se puede aplicar en conjuntos de datos que tienen la misma estructura.
Python3
# Python program to illustrate the working # of union() function import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('GeeksforGeeks.com').getOrCreate() # Creating a data frame data_frame1 = spark.createDataFrame( [("Bhuwanesh", 82.98), ("Harshit", 80.31)], ["Student Name", "Overall Percentage"] ) # Creating another data frame data_frame2 = spark.createDataFrame( [(91.123, "Naveen"), (90.51, "Piyush"), (87.67, "Hitesh")], ["Overall Percentage", "Student Name"] ) # Union both the dataframes using uninonByName() method answer = data_frame1.union(data_frame2) # Print the combination of both the dataframes answer.show()
Producción:
+------------+------------------+ |Student Name|Overall Percentage| +------------+------------------+ | Bhuwanesh| 82.98| | Harshit| 80.31| | 91.123| Naveen| | 90.51| Piyush| | 87.67| Hitesh| +------------+------------------+
Método 2: función UnionByName() en pyspark
La función PySpark unionByName() también se usa para combinar dos o más marcos de datos, pero podría usarse para combinar marcos de datos que tengan un esquema diferente. Esto se debe a que combina marcos de datos por el nombre de la columna y no por el orden de las columnas.
Sintaxis: data_frame1.unionByName(data_frame2)
Dónde,
- data_frame1 y data_frame2 son los marcos de datos
Ejemplo 1:
En este ejemplo, ambos marcos de datos, data_frame1 y data_frame2 son del mismo esquema.
Python3
# Python program to illustrate the working # of unionByName() function import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('GeeksforGeeks.com').getOrCreate() # Creating a dataframe data_frame1 = spark.createDataFrame( [("Bhuwanesh", 82.98), ("Harshit", 80.31)], ["Student Name", "Overall Percentage"] ) # Creating another dataframe data_frame2 = spark.createDataFrame( [("Naveen", 91.123), ("Piyush", 90.51)], ["Student Name", "Overall Percentage"] ) # Union both the dataframes using uninonByName() method answer = data_frame1.unionByName(data_frame2) # Print the result of the union() answer.show()
Producción:
+------------+------------------+ |Student Name|Overall Percentage| +------------+------------------+ | Bhuwanesh| 82.98| | Harshit| 80.31| | Naveen| 91.123| | Piyush| 90.51| +------------+------------------+
Ejemplo 2:
En este ejemplo, data_frame1 y data_frame2 tienen un esquema diferente pero la salida es la deseada.
Python3
# Python program to illustrate the # working of unionByName() function import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('GeeksforGeeks.com').getOrCreate() # Creating a data frame data_frame1 = spark.createDataFrame( [("Bhuwanesh", 82.98), ("Harshit", 80.31)], ["Student Name", "Overall Percentage"] ) # Creating another data frame data_frame2 = spark.createDataFrame( [(91.123, "Naveen"), (90.51, "Piyush"), (87.67, "Hitesh")], ["Overall Percentage", "Student Name"] ) # Union both the dataframes using unionByName() method answer = data_frame1.unionByName(data_frame2) # Print the combination of both the dataframes answer.show()
Producción:
+------------+------------------+ |Student Name|Overall Percentage| +------------+------------------+ | Bhuwanesh| 82.98| | Harshit| 80.31| | Naveen| 91.123| | Piyush| 90.51| | Hitesh| 87.67| +------------+------------------+
Ejemplo 3:
Consideremos ahora dos marcos de datos que contienen un número desigual de columnas (esquema completamente diferente). En este caso, necesitamos pasar un argumento adicional «allowMissingColumns = True» a la función unionByName.
Python3
# Python program to illustrate the working # of unionByName() function with an # additional argument import pyspark from pyspark.sql import SparkSession spark = SparkSession.builder.appName('GeeksforGeeks.com').getOrCreate() # Creating a dataframe data_frame1 = spark.createDataFrame( [("Bhuwanesh", 82.98, "Computer Science"), ("Harshit", 80.31, "Information Technology")], ["Student Name", "Overall Percentage", "Department"] ) # Creating another dataframe data_frame2 = spark.createDataFrame( [("Naveen", 91.123), ("Piyush", 90.51)], ["Student Name", "Overall Percentage"] ) # Union both the dataframes using unionByName() method res = data_frame1.unionByName(data_frame2, allowMissingColumns=True) # Print the result of the union() res.show()
Producción:
+------------+------------------+--------------------+ |Student Name|Overall Percentage| Department| +------------+------------------+--------------------+ | Bhuwanesh| 82.98| Computer Science| | Harshit| 80.31|Information Techn...| | Naveen| 91.123| null| | Piyush| 90.51| null| +------------+------------------+--------------------+