J'ai besoin de convertir beaucoup de fichiers CSV en Parquet, Puisqu'il n'y a pas de ligne de nom de colonne dans l'en-tête du fichier CSV en premier lieu -Ajouter un en-tête au fichier CSV ・ Convertir CSV en Parquet J'ai dû créer un outil pour faire ces deux étapes.
Hypothèses
Le nom de colonne ajouté à l'en-tête CSV sera le titre de la valeur dans le fichier Parquet.
Si la ligne d'en-tête n'existe pas et que les données existent soudainement
Chaque titre du fichier Parquet de sortie sera les données de la première ligne.
Le processus d'ajout d'une ligne d'en-tête CSV pourrait également être écrit en Python, C'était relativement facile à ajouter dans Shell, donc Je l'ai créé dans Shell et j'ai appelé le fichier depuis Python.
qiita.py
import subprocess
# comment
cmd = './add_header.sh'
subprocess.call(cmd, shell=True)
En spécifiant Shell dans le sous-processus Vous pouvez appeler un fichier Shell externe.
add_header.sh
##!/usr/bin/env bash
for file in `\find from_dir -maxdepth 1 -type f`; do
gsed -i '1iheader1,header2' $file
done
"1i" est requis lors de l'appel de gsed.
gsed ・ ・ ・ Veuillez installer gnu-sed.
■ En-tête du fichier CSV du résultat de l'exécution header1,header2
J'ai dû convertir un grand nombre de fichiers CSV existant sur S3 vers Parquet. Tous les fichiers sont téléchargés localement.
qiita2.py
import pyarrow as pa
import pyarrow.parquet as pq
import pandas as pd
import glob
from_dir = './from_dir/'
to_dir = './to_dir/'
#from_Lire tous les CSV dans dir
files = glob.glob(from_dir + "*", recursive=True)
#Convertir un fichier à la fois en_Stocker dans dir
for file in files:
path_name = file.split('/')
df = pd.read_csv(file)
table = pa.Table.from_pandas(df)
pq.write_table(table, to_dir + path_name[2] + '.pq')
Lire le fichier csv, afficher les pandas La conversion en parquet est facile avec pyarrow
Recommended Posts