Modificación y guardado de objetos DataFrame

Completado

Apache Spark proporciona el objeto DataFrame como estructura principal para trabajar con datos. Puede usar objetos DataFrame para consultar y transformar datos y conservar los resultados en un lago de datos. Para cargar datos en un objeto DataFrame, use la función spark.read, especificando el formato de archivo, la ruta de acceso y, opcionalmente, el esquema de los datos que se van a leer. Por ejemplo, el código siguiente carga datos de todos los archivos .csv de la carpeta orders en un objeto DataFrame denominado order_details y, a continuación, muestra los cinco primeros registros.

order_details = spark.read.csv('/orders/*.csv', header=True, inferSchema=True)
display(order_details.limit(5))

Transformación de la estructura de datos

Después de cargar los datos de origen en un objeto DataFrame, puede usar los métodos del objeto DataFrame y las funciones de Spark para transformarlos. Entre las operaciones típicas de un objeto DataFrame se incluyen las siguientes:

  • Filtrado de filas y columnas
  • Cambio de nombre de columnas
  • Creación de nuevas columnas, a menudo derivadas de las existentes
  • Reemplazo de valores null u otros valores

En el ejemplo siguiente, el código usa la función split para separar los valores de la columna CustomerName en dos columnas nuevas denominadas FirstName y LastName. A continuación, usa el método drop para eliminar la columna CustomerName original.

from pyspark.sql.functions import split, col

# Create the new FirstName and LastName fields
transformed_df = order_details.withColumn("FirstName", split(col("CustomerName"), " ").getItem(0)).withColumn("LastName", split(col("CustomerName"), " ").getItem(1))

# Remove the CustomerName field
transformed_df = transformed_df.drop("CustomerName")

display(transformed_df.limit(5))

Puede usar toda la eficacia de la biblioteca de Spark SQL para transformar los datos filtrando filas, derivando, quitando y cambiando el nombre de columnas y aplicando otras modificaciones de datos necesarias.

Guardado de los datos transformados

Una vez que el objeto DataFrame se encuentra en la estructura necesaria, puede guardar los resultados en un formato compatible en el lago de datos.

En el ejemplo de código siguiente se guarda el objeto DataFrame en un archivo Parquet del lago de datos, reemplazando cualquier archivo existente con el mismo nombre.

transformed_df.write.mode("overwrite").parquet('/transformed_data/orders.parquet')
print ("Transformed data saved!")

Nota

Normalmente, el formato Parquet es el preferido para los archivos de datos que usará para su posterior análisis o ingesta en un almacén analítico. Parquet es un formato muy eficaz que es compatible con la mayoría de los sistemas de análisis de datos a gran escala. De hecho, a veces el requisito de transformación de datos puede ser simplemente convertir datos de otro formato (como CSV) a Parquet.