En este artículo, vamos a ver cómo concatenar dos marcos de datos pyspark usando Python.
Creando Dataframe para demostración:
Python3
# Importing necessary libraries from pyspark.sql import SparkSession # Create a spark session spark = SparkSession.builder.appName('pyspark - example join').getOrCreate() # Create data in dataframe data = [(('Ram'), '1991-04-01', 'M', 3000), (('Mike'), '2000-05-19', 'M', 4000), (('Rohini'), '1978-09-05', 'M', 4000), (('Maria'), '1967-12-01', 'F', 4000), (('Jenis'), '1980-02-17', 'F', 1200)] # Column names in dataframe columns = ["Name", "DOB", "Gender", "salary"] # Create the spark dataframe df1 = spark.createDataFrame(data=data, schema=columns) # Print the dataframe df1.show()
Producción:
+------+----------+------+------+ | Name| DOB|Gender|salary| +------+----------+------+------+ | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| +------+----------+------+------+
Creación de un segundo marco de datos para demostración:
Python3
# Create data in dataframe data2 = [(('Mohi'), '1991-04-01', 'M', 3000), (('Ani'), '2000-05-19', 'F', 4300), (('Shipta'), '1978-09-05', 'F', 4200), (('Jessy'), '1967-12-01', 'F', 4010), (('kanne'), '1980-02-17', 'F', 1200)] # Column names in dataframe columns = ["Name", "DOB", "Gender", "salary"] # Create the spark dataframe df2 = spark.createDataFrame(data=data, schema=columns) # Print the dataframe df2.show()
Producción:
+------+----------+------+------+ | Name| DOB|Gender|salary| +------+----------+------+------+ | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| +------+----------+------+------+
Método 1: Usando Union()
Los métodos Union() del DataFrame se emplean para mezclar dos DataFrame de una estructura/esquema equivalente.
Sintaxis: dataframe_1. unión ( marco de datos_2 )
dónde,
- dataframe_1 es el primer marco de datos
- dataframe_2 es el segundo marco de datos
Ejemplo :
Python3
# union the above created dataframes result = df1.union(df2) # display result.show()
Producción:
+------+----------+------+------+ | Name| DOB|Gender|salary| +------+----------+------+------+ | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| +------+----------+------+------+
Método 2: Usar unionByName()
En Spark 3.1, puede lograr esto fácilmente usando unionByName() para concatenar el marco de datos
Sintaxis : dataframe_1.unionByName(dataframe_2)
dónde,
- dataframe_1 es el primer marco de datos
- dataframe_2 es el segundo marco de datos
Ejemplo :
Python3
# union the two dataftames by using unionByname result1 = df1.unionByName(df2) # display result1.show()
Producción:
+------+----------+------+------+ | Name| DOB|Gender|salary| +------+----------+------+------+ | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| +------+----------+------+------+
Método 3: Uso de funciones
El módulo Functools proporciona funciones para trabajar con otras funciones y objetos invocables para usarlos o ampliarlos sin reescribirlos por completo.
Sintaxis :
functools.reduce(lambda df1, df2: df1.union(df2.select(df1.columnas)), dfs)
dónde,
- df1 es el primer marco de datos
- df2 es el segundo marco de datos
Creamos marcos de datos con las columnas ‘a’ y ‘b’ de algunos valores aleatorios y pasamos estos tres marcos de datos a nuestro método unionAll() creado anteriormente y obtenemos el marco de datos resultante como salida y mostramos el resultado.
Ejemplo :
Python3
import functools # explicit function def unionAll(dfs): return functools.reduce(lambda df1, df2: df1.union( df2.select(df1.columns)), dfs) # unionAll result3 = unionAll([df1, df2]) result3.show()
Producción:
+------+----------+------+------+ | Name| DOB|Gender|salary| +------+----------+------+------+ | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| | Ram|1991-04-01| M| 3000| | Mike|2000-05-19| M| 4000| |Rohini|1978-09-05| M| 4000| | Maria|1967-12-01| F| 4000| | Jenis|1980-02-17| F| 1200| +------+----------+------+------+
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