2
respostas

(Resolvido) Erro ao salvar 'estabelecimentos' como 'parquet'

Também enfrentei o mesmo problema, segue a correção que apliquei após consultar alguns fóruns.

Ao rodar o comando abaixo diretamente, está dando erro pois há datas invalidas em algumas colunas de dados do dataframe.

estabelecimentos.write.parquet(
    '/content/drive/MyDrive/curso-spark/estabelecimentos/parquet',
    mode='overwrite'
)

Para tratar este ponto criei uma célula que corrige as datas do dataframe, basta adicionar isso antes de realizar a escrita.

# F = f
date_cols = [item[0] for item in estabelecimentos.dtypes if item[1].startswith('date')]
for date_col in date_cols:
    estabelecimentos = estabelecimentos.withColumn(date_col, 
    f.when(
      f.col(date_col) <= '1900-01-01', 
      f.to_date(f.lit('1900-01-01'), 'yyyy-MM-dd'))
    .otherwise(f.col(date_col)))

Uma vez realizada a escrita, caso vá realizar a leitura é preciso configurar a classe de leitura do spark. Com isso o modo de compatibilidade ficará ativo e conseguirá realizar a leitura do parquet.

spark.conf.set('spark.sql.legacy.parquet.datetimeRebaseModeInRead', 'CORRECTED')

Versão final do commands Versão final da correção para conseguir salvar o parquet

2 respostas

Muito obrigado pela correção do problema. Deu certo aqui.

Funcionou corretamente! Obrigado pela solução!