Wpis z mikrobloga

#datascience

Hej Mirki, tak sobie dlubie proste ETL w #pandas #numpy #python i glowkuje jak tu skrocic czas ladowania trzech duzych (1GB kazdy 900k x 200) CSV. Jedyne co przychodzi mi jeszcze do glowy to dorzucenie multiprocesingu bo duzo sie dzieje, z %pruna widze ze w tej chwili CPU jest waskim gardlem. Probowalem w prymitywny sposob zaladowac to w multi rozrzucajac kazdy plik na osobny proces ale naturalnie zabraklo RAMu, wiem, ze musze zchunkowac pliki i rozdystrybuowac chunki do workerow, probowalem chunksize= ale cos mi to nie bardzo chce w multi biegac. Bede jeszcze jutro probowal z np.arraysplit.

moj csv
read wyglada tak:

paths = os.path.join(VOLUME_CSV, "volume PN FY*.csv")
files = glob.glob(paths)

def csv_reader(file):
df = pd.read_csv(file,
low_memory=False,
cache_dates=True,
thousands=',',
infer_datetime_format=True,
parse_dates=["Funded date", "Maturity date"],
dtype=col_types,
true_values=['Y'],
false_values=['N'],
na_values=['-'],
index_col=False
)
return df
df = pd.concat(map(csv_reader, files), ignore_index=True).reset_index(drop=True)

Czy macie jakis boiler plate jak to ugrysc, dobre rady, slowo na pocieszenie? Jak to zoptymalizowac. Wrzucilem pytanie na stacka ale narazie cisza:

https://stackoverflow.com/questions/72944450/pandas-chunks-from-multiple-files-to-list-collection-to-process-them-with-mult

Jeszcze jedno, chce to zrobic bez Daska, bede chcial dorzucic tam jeszcze jakies operacje ale generalnie wiekszosc manipulacji mam z uzycie wektoryzacji wiec nie warto ich ruszac.

Z gory dziekuje za pomoc.
  • 13
@hoszak: Z ciekawości, czemu nie chcesz używać Dask-a?

Polars jest naprawdę spoko, piszę się w tym jak Pandas, u nas w firmie właśnie migrujemy z Pandas na Polars gdzie się da.

Możesz też użyć Ray lub bardziej high level Modin. Generalnie nie wiem jaki przyrost wydajności cię interesuje, na pewno jakbyś miał pliki w formacie Parquet to byłoby lepiej.
@Acrylic: Ujme to tak, moja firma jest bardzo konserwatywna pod wzgledem technologii :). W tej chwili przenosze ETL z Power Query do Pandasa, dostalem zgode na Pandasa bo sa na rynku ludzie ktorzy w tym pisza, no i jeszcze jestdzial od ML, tak na wszelki wypadek jak bym chcial sie zawinac. Mialem nie implementowac dodatkowych bibliotek w obawie przed brakiem wsparcia. Tak naprawde najchetniej to co robie zrobilbym na SQLu ale
@Acrylic: siema, pobawilem sie troche Polarisem, chodzi piekielnie szybko, bardzo obiecujace. Ale czasem tracebacki wali takie, ze nie wiadomo o co chodzi, trzeba debugowac. Widac, ze jeszcze troche brakuje dojrzalosci. Nie wiem czy to przypadlosci pythonowego API czy w Ruscie daje te same tracebacki ale brak wskaznika jakiegokolwiek odnosnie kolumny, nr kolumny czy jakiegokolwiek wskazania o ktora chodzi konczy sie debugowaniem albo szukaniem igly w stogu siana. Mam 50 kolumn bool.
@pejczi: To jest troche taka rada jak, "a czemu tego nie napiszesz w C?" :). Ja nawet chetnie bym powalczyl z Databricks czy Sparkiem, ale to nie ja tutaj ustalam zasady, umowilismy sie, ze bedzie w Pandasie bo on oferuje stosunkowo niski prog wejscia i duze wsparcie. Troche poeksperymentowalem z Polarsem bo on jest blizniaczo podobny do Pandasa. Spark na pewno jest ciekawa alternatywa ale nie bedzie na to zgody, o
@pejczi: mysle, ze firma w ktorej pracuje bardziej patrzy kategoriami: "predzej ktos z Excela/PowerQuery przysposobi sie do Pandasa niz my bedziemy chcieli zaplacic za eksperta w Sparku" :)
@pejczi: uczciwie powiem, ze dla mnie to jest porazka bo to wszystko po prostu powinno siedziec na SQLu i do tych potrzeb wydaje sie to byc najrozsadniejsze rozwiazanie. Z niejasnych dla mnie przyczyn nie chca tego zrobic. Na consulting poszlo, podejrzewam juz duzo wiecej.