Czy istnieje sposób na zachowanie zmiennej (dużej tabeli / ramki danych) w pamięci i współdzielenie jej przez wiele notebooków ipython?
Szukałbym czegoś, co jest koncepcyjnie podobne do trwałych zmiennych MATLAB. Istnieje możliwość wywołania niestandardowej funkcji / biblioteki z wielu indywidualnych edytorów (notebooków) i uzyskania przez tę funkcję pamięci podręcznej jakiegoś wyniku (lub dużej tabeli).
Przede wszystkim chciałbym uniknąć ponownego ładowania mocno używanej tabeli (która jest ładowana przez niestandardową bibliotekę, która jest wywoływana z notesów), ponieważ czytanie zajmuje około 2-3 minut za każdym razem, gdy zaczynam nową analizę.
Odpowiedzi:
Jeśli jest to ważne dla twoich przypadków użycia, możesz spróbować przejść na Apache Zeppelin. Ponieważ wszystkie zeszyty Spark mają ten sam kontekst Spark, to samo środowisko uruchomione w języku Python. https://zeppelin.apache.org/
Więc to, o co pytasz, dzieje się natywnie w Zeppelin. Lub, aby zakończyć, jest to opcja, aby współużytkować ten sam kontekst Spark / to samo środowisko Python między wszystkimi notatnikami Spark (w Zeppelin nazywane są one „notatkami”):
Możesz więc wybrać kontekst globalny (domyślne zachowanie Zeppelina), na notatkę (jedyne możliwe zachowanie Jupytera) lub na użytkownika.
Jeśli nie możesz / nie chcesz przejść na Zeppelin, spójrz na inne opcje udostępniania wspólnych ramek danych między notebookami za pomocą:
ps. Obecnie nie można importować plików ipynb do Zeppelin (ma swój własny format notebooka zapisany jako plik json), dopóki nie zostanie zaimplementowany https://issues.apache.org/jira/browse/ZEPPELIN-1793 ; chociaż w większości przypadków nie jest tak trudno przekonwertować je ręcznie.
źródło