Mam pliku csv ~ 50GB, z którymi mam doPrzyspieszenie przetwarzania lekki ~ 50 GB plik CSV
- potrwać kilka podzbiorów kolumnach CSV
- Zastosuj inną specyfikację format string do każdy podzbiór kolumn w pliku CSV.
- Wysyłaj nowy plik CSV dla każdego podzbioru z własną specyfikacją formatu.
Zdecydowałem się użyć Pandy i mają ogólne podejście iteracji nad kawałkami poręcznej bryłkach wielkości (od nieco ponad pół miliona linii) w celu wytworzenia DataFrame i dołączenie części do każdego pliku CSV wyjściowego. Więc coś takiego:
_chunk_size = 630100
column_mapping = {
'first_output_specification' : ['Scen', 'MS', 'Time', 'CCF2', 'ESW10'],
# ..... similar mappings for rest of output specifications
}
union_of_used_cols = ['Scen', 'MS', 'Time', 'CCF1', 'CCF2', 'VS', 'ESW 0.00397', 'ESW0.08',
'ESW0.25', 'ESW1', 'ESW 2', 'ESW3', 'ESW 5', 'ESW7', 'ESW 10', 'ESW12',
'ESW 15', 'ESW18', 'ESW 20', 'ESW22', 'ESW 25', 'ESW30', 'ESW 35',
'ESW40']
chnk_iter = pd.read_csv('my_big_csv.csv', header=0, index_col=False,
iterator=True, na_filter=False, usecols=union_of_used_cols)
cnt = 0
while cnt < 100:
chnk = chnk_iter.get_chunk(_chunk_size)
chnk.to_csv('first_output_specification', float_format='%.8f',
columns=column_mapping['first_output_specification'],
mode='a',
header=True,
index=False)
# ..... do the same thing for the rest of the output specifications
cnt += 1
Mój problem, że jest to naprawdępowolny. Każda porcja trwa około minuty, aby wygenerować dopisek do plików CSV, a więc zajmuję się prawie 2 godzinami, aby zadanie zostało wykonane.
Próbowałem umieścić kilka optymalizacji, używając tylko zjednoczenia podzbiorów kolumn podczas odczytu w pliku CSV, a także ustawienia na_filter=False
, ale nadal nie można tego zaakceptować.
Zastanawiam się, czy istnieje szybszy sposób na to przetwarzanie światła pliku CSV w Pythonie, albo za pomocą optymalizacji lub korekty mojego podejścia, albo po prostu istnieje lepsze narzędzie dostosowane do tego rodzaju pracy to Pandas ... dla mnie (niedoświadczony użytkownik Pandy) wygląda na to, że jest tak szybki, jak mógłby dostać się z Pandami, ale mogę się pomylić.
Czy można przełączyć na podejście bazodanowe? To jest jeden duży plik CSV! –
@Jylo Naprawdę chciałbym, żeby tak było, ale nie. –
Czy 'chunksize' zawiera liczbę wierszy, które chcesz mieć w każdym kawałku? – albert