ComenzarEmpieza gratis

Trabajar con archivos Parquet

Los archivos CSV van muy bien para guardar en disco el contenido de objetos de datos rectangulares (como data.frame de R y DataFrames de Spark). El problema es que son muy lentos de leer y escribir, lo que los hace inviables para conjuntos de datos grandes. Los archivos Parquet ofrecen una alternativa de mayor rendimiento. Además de usarse con datos de Spark, los archivos Parquet pueden utilizarse con otras herramientas del ecosistema Hadoop, como Shark, Impala, Hive y Pig.

Técnicamente, hablar de archivo Parquet es impreciso. Cuando guardas datos en formato Parquet, en realidad obtienes un directorio completo con varios archivos. Los datos se dividen en múltiples archivos .parquet, lo que permite almacenarlos fácilmente en varias máquinas, y también hay archivos de metadatos que describen el contenido de cada columna.

sparklyr puede importar archivos Parquet usando spark_read_parquet(). Esta función recibe una conexión de Spark, una cadena con el nombre del Spark DataFrame que se debe crear y una ruta al directorio Parquet. Ten en cuenta que esta función importará los datos directamente en Spark, lo que suele ser más rápido que importar los datos en R y luego usar copy_to() para copiar los datos de R a Spark.

spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")

Este ejercicio forma parte del curso

Introducción a Spark con sparklyr en R

Ver curso

Instrucciones del ejercicio

Ya tienes creada una conexión a Spark como spark_conn. También tienes una cadena que apunta al directorio Parquet (en el sistema de archivos donde se está ejecutando R) como parquet_dir.

  • Usa dir() para listar las rutas de archivo absolutas de los archivos en el directorio Parquet, asignando el resultado a filenames.
    • El primer argumento debe ser el directorio cuyos archivos quieres listar, parquet_dir.
    • Para obtener rutas absolutas (y no relativas), pasa además full.names = TRUE.
  • Crea un data_frame con dos columnas.
    • filename debe contener los nombres de archivo que acabas de obtener, sin la parte del directorio. Crea esto pasando los nombres de archivo a basename().
    • size_bytes debe contener los tamaños de esos archivos. Crea esto pasando los nombres de archivo a file.size().
  • Usa spark_read_parquet() para importar los datos de timbre en Spark, asignando el resultado a timbre_tbl.
    • El primer argumento debe ser la conexión de Spark.
    • El segundo argumento debe ser "timbre".
    • El tercer argumento debe ser parquet_dir.

Ejercicio interactivo práctico

Prueba este ejercicio y completa el código de muestra.

# parquet_dir has been pre-defined
parquet_dir

# List the files in the parquet dir
filenames <- ___

# Show the filenames and their sizes
data_frame(
  filename = ___,
  size_bytes = ___
)

# Import the data into Spark
timbre_tbl <- ___
Editar y ejecutar código