1
resposta

[Sugestão] [RESOLUÇÃO] - LEITURA DE ARQUIVOS VIA JUPYTER NOTEBOOK

Pessoal, postando aqui antes que eu esqueça

Caso alguém estiver tentando realizar a leitura de arquivos entre o módulo (Carregamento de dados) e (Manipulando dados) e o Jupyter Notebook nunca parar de executar, tenho uma solução aqui embaixo. A solução de ler todos os arquivos de uma vez do Google Colab não funciona sem realizar iterações no Jupyter Notebook, fiz duas soluções abaixo (ai podem testar) a que funciona melhor e se tiverem interesse!

  1. Solução 1: É a forma mais tradicional.
%%time

# Caminho para caso o diretório que contém os arquivos estejam em algum local do (D:), diferente do acima
# Realiza a contagem de registros do arquivo
# Essa é a maneira para carregar os dados de (empresas) do jeito mais tradicional

import glob
from pyspark.sql import SparkSession

# Caminho do diretório e padrão de nome dos arquivos
path = 'D:/Archives/tests-tables/gov-open-data/empresas/*.csv'

# Listar todos os caminhos dos arquivos CSV no diretório
file_paths = glob.glob(path)

# Inicializar uma lista para armazenar os DataFrames
dfs = []

# Ler cada arquivo CSV em um DataFrame e adicionar à lista dfs
for file in file_paths:
    df = spark.read.csv(file, sep=';', inferSchema=True)
    dfs.append(df)

# Unir todos os DataFrames em um único DataFrame
empresas = None
for df in dfs:
    if empresas is None:
        empresas = df
    else:
        empresas = empresas.union(df)

# Contar o número total de linhas
total_linhas = empresas.count()

print(f"Total de linhas lidas: {total_linhas}")
  1. Solução 2: É a forma mais simplificada.
%%time

# Caminho para caso o diretório que contém os arquivos estejam em algum local do (D:), diferente do acima
# Realiza a contagem de registros do arquivo
# Essa é a maneira para carregar os dados de (empresas) do jeito mais simplificado

import glob
from functools import reduce

# Caminho do diretório e padrão de nome dos arquivos
path = 'D:/Archives/tests-tables/gov-open-data/empresas/*.csv'

arquivos = glob.glob(path)

# Ler cada arquivo CSV em um DataFrame e armazenar na lista dfs
dfs = [spark.read.csv(file, sep=';', inferSchema=True) for file in arquivos]

# Unir todos os DataFrames em um único DataFrame
empresas = reduce(lambda df1, df2: df1.union(df2), dfs)

print(f'Total de linhas lidas: ', empresas.count())

Valeuu

1 resposta

Olá Luiz, tudo bem com você?

É muito bom ler postagens como a sua. A clareza e detalhamento do seu passo a passo são excelentes e sem dúvida, serão de grande auxílio para estudantes que enfrentam questões semelhantes. Obrigado por dispor do seu tempo para contribuir com a comunidade Alura.

Conte com o apoio do Fórum na sua jornada. Abraços e bons estudos!