Doświadczenie z wykorzystaniem h5py do pracy analitycznej na big data w Pythonie?

Wykonuję dużo pracy statystycznej i używam Pythona jako głównego języka. Niektóre z zestawów danych, z którymi pracuję, mogą jednak zająć 20 GB pamięci, co sprawia, że obsługa ich za pomocą funkcji w pamięci numpy, scipy i PyIMSL jest prawie niemożliwa. Język analizy statystycznej SAS ma tutaj dużą zaletę, ponieważ może operować na danych z dysku twardego, w przeciwieństwie do przetwarzania ściśle w pamięci. Ale, chcę uniknąć konieczności pisania dużo kodu w SAS (dla różnych powody) i dlatego staram się ustalić, jakie opcje mam z Pythonem (oprócz zakupu więcej sprzętu i pamięci).

Powinienem wyjaśnić, że podejścia takie jak Map-reduce nie pomogą w dużej części mojej pracy, ponieważ muszę operować na kompletnych zestawach danych (np. obliczanie kwantyli lub dopasowanie modelu regresji logistycznej).

Ostatnio zacząłem grać z h5py i uważam, że jest to najlepsza opcja, jaką znalazłem, pozwalająca Pythonowi działać jak SAS i działać na danych z dysku (poprzez pliki hdf5), przy jednoczesnym wykorzystaniu numpy/scipy / matplotlib itp. Chciałbym usłyszeć, czy ktoś ma doświadczenie w używaniu Pythona i h5py w podobnym ustawieniu i co znalazł. Czy ktoś był w stanie używać Pythona w Ustawieniach "big data" dotychczas zdominowanych przez SAS?

EDIT: zakup większej ilości sprzętu / pamięci z pewnością może pomóc, ale z punktu widzenia IT trudno mi sprzedać Pythona organizacji, która musi analizować ogromne zbiory danych, gdy Python (lub R, lub MATLAB itp.) muszą przechowywać dane w pamięci. SAS nadal ma tutaj silny punkt sprzedaży, ponieważ chociaż analizy dyskowe mogą być wolniejsze, możesz śmiało radzić sobie z ogromnymi zestawami danych. Mam więc nadzieję, że Stackoverflow-ers pomoże mi dowiedzieć się, jak zmniejszyć postrzegane ryzyko związane z używaniem Pythona jako głównego języka analityki big data.

Author: JoshAdel, 2011-02-02

2 answers

Używamy Pythona w połączeniu z h5py, numpy/scipy i boost:: python do analizy danych. Nasze typowe zestawy danych mają rozmiary do kilkuset GBs.

Zalety HDF5:

  • DANE można wygodnie sprawdzać za pomocą aplikacji h5view, h5py / ipython i narzędzi wiersza poleceń h5 *
  • API są dostępne dla różnych platform i języków
  • struktura danych za pomocą grup
  • adnotacja danych za pomocą atrybutów
  • bezproblemowe wbudowane dane kompresja
  • io na pojedynczych zestawach danych jest szybkie

Pułapki HDF5:

  • wydajność spada, jeśli plik h5 zawiera zbyt wiele zestawów danych/grup (> 1000), ponieważ przemierzanie ich jest bardzo powolne. Z drugiej strony, io jest szybkie dla kilku dużych zbiorów danych.
  • [[5]} zaawansowane zapytania danych (podobne do SQL) są niezdarne do wdrożenia i powolne (w takim przypadku rozważ SQLite)
  • HDF5 nie jest bezpieczny dla wątków we wszystkich przypadkach: należy upewnić się, że biblioteka została skompilowana z poprawnym opcje
  • zmiana zbiorów danych h5 (zmiana rozmiaru, usuwanie itp.) zwiększa rozmiar pliku (w najlepszym przypadku) lub jest niemożliwy (w najgorszym przypadku) (cały plik h5 musi zostać skopiowany, aby go ponownie spłaścić)
 49
Author: Bernhard Kausler,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-02 12:59:43

Jest to długi komentarz, a nie ODPOWIEDŹ na twoje rzeczywiste pytanie dotyczące h5py. Nie używam Pythona do statystyk i zazwyczaj zajmuję się relatywnie małymi zbiorami danych, ale może warto przez chwilę sprawdzić Widok zadań CRAN dla high-performance computing W R, szczególnie sekcję "Large memory and out-of-memory data".

Trzy powody:

  • możesz wydobywać kod źródłowy dowolnego z tych pakietów dla pomysłów, które mogą Ci ogólnie pomóc
  • możesz znaleźć nazwy pakietów przydatne w wyszukiwaniu odpowiedników Pythona; wielu użytkowników R to również użytkownicy Pythona
  • w pewnych okolicznościach może okazać się wygodne, aby po prostu połączyć się z R dla konkretnej analizy przy użyciu jednego z wyżej połączonych pakietów, a następnie pobrać wyniki z powrotem do Pythona

Ponownie podkreślam, że to nie jest moja Liga, I jest na pewno możliwe, że możesz już to wszystko wiedzieć. Ale być może okaże się to przydatne dla Ciebie lub kogoś, kto pracuje nad te same problemy.

 5
Author: Matt Parker,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2011-02-02 20:04:01