Trabalhando com arquivos parquet
Arquivos CSV são ótimos para salvar em disco o conteúdo de objetos de dados retangulares (como data.frames do R e DataFrames do Spark). O problema é que eles são bem lentos para ler e escrever, o que os torna inviáveis para conjuntos de dados grandes. Arquivos Parquet oferecem uma alternativa com desempenho superior. Além de serem usados com dados do Spark, arquivos parquet também podem ser utilizados com outras ferramentas do ecossistema Hadoop, como Shark, Impala, Hive e Pig.
Tecnicamente falando, “arquivo parquet” é um termo impreciso. Quando você armazena dados no formato parquet, na verdade obtém um diretório inteiro de arquivos. Os dados são divididos em vários arquivos .parquet, o que facilita o armazenamento em várias máquinas, e há também alguns arquivos de metadados descrevendo o conteúdo de cada coluna.
O sparklyr pode importar arquivos parquet usando spark_read_parquet(). Essa função recebe uma conexão Spark, uma string com o nome do Spark DataFrame que deve ser criado e um caminho para o diretório parquet. Observe que essa função importará os dados diretamente no Spark, o que geralmente é mais rápido do que importar os dados para o R e depois usar copy_to() para copiá-los do R para o Spark.
spark_read_parquet(sc, "a_dataset", "path/to/parquet/dir")
Este exercício faz parte do curso
Introdução ao Spark com sparklyr em R
Instruções do exercício
Uma conexão Spark foi criada para você como spark_conn. Uma string apontando para o diretório parquet (no sistema de arquivos onde o R está sendo executado) foi criada para você como parquet_dir.
- Use
dir()para listar os caminhos de arquivos absolutos dos arquivos no diretório parquet, atribuindo o resultado afilenames.- O primeiro argumento deve ser o diretório cujos arquivos você está listando,
parquet_dir. - Para recuperar caminhos absolutos (em vez de relativos), você também deve passar
full.names = TRUE.
- O primeiro argumento deve ser o diretório cujos arquivos você está listando,
- Crie um
data_framecom duas colunas.filenamedeve conter os nomes de arquivo que você acabou de obter, sem a parte do diretório. Crie isso passando os nomes de arquivo parabasename().size_bytesdeve conter os tamanhos desses arquivos. Crie isso passando os nomes de arquivo parafile.size().
- Use
spark_read_parquet()para importar os dados de timbre no Spark, atribuindo o resultado atimbre_tbl.- O primeiro argumento deve ser a conexão Spark.
- O segundo argumento deve ser
"timbre". - O terceiro argumento deve ser
parquet_dir.
Exercício interativo prático
Experimente este exercício completando este código de exemplo.
# 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 <- ___