Skip to content

Instantly share code, notes, and snippets.

@marcelotournier
Created March 5, 2021 15:26
Show Gist options
  • Save marcelotournier/f23b8d6463cb04fcc4168866f7be460b to your computer and use it in GitHub Desktop.
Save marcelotournier/f23b8d6463cb04fcc4168866f7be460b to your computer and use it in GitHub Desktop.
Convertendo arquivos csv em parquet
"""
# CSV => PARQUET
Converte um csv para parquet em uma pasta com o mesmo nome.
# DEPENDÊNCIAS:
Instale o pyspark:
pip install pyspark
# USO:
Especifique o arquivo de input e o separador do arquivo:
python converter_csv_para_parquet.py meuarquivogigante.csv --separador ";"
# COMO LER PARQUET EM PANDAS:
- instale fastparquet usando conda (com pip em windows vc precisa instalar o MS C++ runtime):
conda install fastparquet
pip install pandas python-snappy pyarrow
- No python:
import pandas as pd
df = pd.read_parquet("arquivo.parquet")
"""
import os
import shutil
from sys import argv
import pyspark
def csv_em_parquet(arquivo, separador):
spark = pyspark.sql.SparkSession.builder.getOrCreate()
df = spark.read.option("header", "true").option("sep", separador).csv(arquivo)
parquet_destino = arquivo + ".parquet"
df.coalesce(1).write.parquet(parquet_destino)
arq_parquet = [arq for arq in os.listdir(parquet_destino) if arq.endswith(".parquet")][0]
shutil.move(os.path.join(parquet_destino, arq_parquet), os.getcwd())
shutil.rmtree(parquet_destino)
shutil.move(arq_parquet, parquet_destino)
spark.stop()
if __name__ == '__main__':
import argparse
import sys
class MyParser(argparse.ArgumentParser):
def error(self, message):
sys.stderr.write('error: %s\n' % message)
self.print_help()
sys.exit(2)
parser = MyParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument("arquivo", help="nome do arquivo csv a ser convertido")
parser.add_argument("--separador", help="separador de coluna do arquivo csv")
args = parser.parse_args()
csv_em_parquet(args.arquivo, args.separador)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment