Desafio 03 - ME315

Author

Maria Eduarda Villéla Silva

###Introdução

Arquivo parquet é um formato de arquivo colunar, isto é, armazena dados pora coluna (não por linha). Tal formato foi criado para guardar grandes volumes de dados de forma eficiente, possuindo compressão automática, o que ocupa menos espaço em disco. O parquet é muito usado em big data e ciência de dados para armazenar tabelas grandes. O banco de dados parquet usado nesse desafio pode ser econtrado no link: https://www.kaggle.com/datasets/jakewright/2m-daily-weather-history-uk?resource=download&select=all_weather_data.parquet

Arquivo JSON (JavaScript Object Notation) é um formato de arquivo baseado em texto, usado para representar dados estruturados, isto é, ele usa pares de chave-valor e listas. Esse tipo de arquivo pode armazenar desde objetos simples até estruturas aninhadas (listas dentro de listas). O JSON é muito usado em APIs, troca de dados entre sistemas e armazenamento de configurações. O banco de dados JSON usado nesse desafio pode ser encontrado no link: https://www.kaggle.com/datasets/eswarchandt/amazon-music-reviews?select=Musical_Instruments_5.json

##Códigos a serem executados

Carregamento dos pacotes necessários:

library(arrow) #pacote para ler parquet

Attaching package: 'arrow'
The following object is masked from 'package:utils':

    timestamp
library(jsonlite) #pacote para ler json e trabalhar com aqrquivos json em geral
Warning: package 'jsonlite' was built under R version 4.3.3

Leitura do arquivo parquet:

#afunção read_parquet() lê o arquivo e retorna um data frame

arq_parquet <- read_parquet("all_weather_data.parquet")
class(arq_parquet)
[1] "tbl_df"     "tbl"        "data.frame"

Foi realizado o uso da função arrow::read_parquet para ler o arquivo all_weather_data.parquet do diretório atual. Por padrão, o arrow converte para data frame. Foi usada a função tbl_df, tbl, data.frame para mostrar que o banco de dados foi carregado como data frame, já que essa função serve para identificar a classe de um objeto.

Leitura do arquivo JSON:

#a função lê o arquivo JSON linha a linha (JSON lines)

arq_json <- stream_in(file("Musical_Instruments_5.json"))
opening file input connection.

 Found 500 records...
 Found 1000 records...
 Found 1500 records...
 Found 2000 records...
 Found 2500 records...
 Found 3000 records...
 Found 3500 records...
 Found 4000 records...
 Found 4500 records...
 Found 5000 records...
 Found 5500 records...
 Found 6000 records...
 Found 6500 records...
 Found 7000 records...
 Found 7500 records...
 Found 8000 records...
 Found 8500 records...
 Found 9000 records...
 Found 9500 records...
 Found 10000 records...
 Found 10261 records...
 Imported 10261 records. Simplifying...
closing file input connection.
class(arq_json)
[1] "data.frame"

O arquivo é do tipo JSON Lines (cada linha é um objeto JSON separado). Assim, o R lê cada linha separadamente e depois junta tudo em um data frame. A função file() cria uma conexão R para o arquivo, isso permite que ele seja lido linha a linha, sem tentar carregar tudo como um único JSON grande. O stream_in() (do pacote jsonlite) consome a conexão e decodifica cada linha JSON, empilhando em um data frame, se as chaves forem consistentes. Isso resolve o problema de arquivos de reviews (como Amazon, que é o caso usado aqui) que não estão em um array, e sim como objetos soltos por linha. Aqui também foi utilizada a função data.frame para ver que o carregamento do banco de dados resultou diretamente em um data frame.