다른 파이썬 커널간에 DataFrame을 다시로드하지 마십시오.


10

변수 (큰 테이블 / 데이터 프레임)를 메모리에 유지하고 여러 ipython 노트북에서 공유하는 방법이 있습니까?

MATLAB의 지속적 변수와 개념적으로 유사한 것을 찾고 있습니다. 여러 개별 편집기 (노트북)에서 사용자 정의 함수 / 라이브러리를 호출하고 해당 외부 함수가 일부 결과 (또는 큰 테이블)를 캐시 할 수 있습니다.

주로 새로운 분석을 시작할 때마다 약 2-3 분이 걸리므로 많이 사용되는 테이블 (노트북에서 호출 된 사용자 정의 라이브러리를 통해로드 됨)을 다시로드하지 않으려합니다.


1
이것은 가능하지 않은 것으로 보이며 조심하지 않으면 많은 두통을 유발할 수 있습니다. msgpack 과 같은 효율적인 형식으로 데이터를 유지하는 것이 옵션이 아닙니까?
Emre

@ 감사합니다. msgpack의 까다로운 부분은 테이블을 읽어야하는 근본적인 문제를 해결하지 못한다는 것입니다. 또한 그것은 양날의 칼이다 : 그것은 테이블의 원래 형식에 비해 시간의 약 40 %를 절약 할 수 있지만, 그것은 또한 (덜 깨끗되는) 원본 데이터에서 멀리 수동 분석을 한 작은 단계를두고
tsttst

가장 좋은 옵션은 redis와 같은 캐시이며 msgpack과 함께 사용할 수 있다고 생각합니다. 최소한 디스크 대신 메모리를 유지할 수 있습니다.
Emre

1
내가 사용하는 것이 좋습니다 것입니다 깃털을 - 그것의 매우 빠른
MaxU

1
Spark와 캐싱이 옵션입니까? 초기 읽기 / 프로세싱을 수행하지만 노트북에서 Spark를 사용하는 것으로 제한되어 있습니다.
Dolan Antenucci

답변:


4

사용 사례에 중요한 경우 Apache Zeppelin으로 전환 해 볼 수 있습니다. 모든 Spark 노트북은 동일한 Spark 컨텍스트, 동일한 Python 실행 환경을 공유합니다. https://zeppelin.apache.org/

그래서 당신이 묻는 것은 제플린에서 기본적으로 발생합니다. 또는 완료하려면 모든 Spark 노트북 (Zeppelin에서 '노트'라고 함)간에 동일한 Spark 컨텍스트 / 동일한 Python 환경을 공유하는 옵션이 있습니다.

Zeppelin의 Spark Interpreter 공유 옵션

따라서 전체 컨텍스트 (기본 Zeppelin의 동작), Per Per (유일한 Jupyter의 동작) 또는 사용자 별 컨텍스트를 공유하도록 선택할 수 있습니다.

Zeppelin으로 전환 할 수 없거나 원하지 않는 경우 다음을 사용하여 노트북간에 공통 데이터 프레임을 공유하는 다른 옵션을 살펴보십시오.

추신. https://issues.apache.org/jira/browse/ZEPPELIN-1793 이 구현 될 때까지 ipynb 파일을 현재 Zeppelin으로 가져올 수 없습니다 (자체 파일은 json 파일로 저장 됨) . 대부분의 경우 수동으로 변환하는 것은 어렵지 않습니다.


1
감사합니다. 아마도 ipython / jupyter 노트북에서 멀리 전환 할 것입니다. zeppelin은 정의 된 변수의 내용 만 선택적으로 공유 할 수 있지만 다른 편집자 / 노트 / 노트 내에서 동일하게 명명 된 변수의 내용을 선택적으로 공유 할 수있는 가능성을 지원합니까? (MATLAB처럼)
tsttst

안타깝게도-프로세스 수준에서 제어됩니다. 그래서 그것은 전부 또는 아무것도 아닙니다. Per Note를 선택하면 Jupyter와 동일한 동작이됩니다. Globally를 선택하면 모든 것을 공유합니다. 일반적으로 다중 사용자 환경에서 리소스를 덜 사용하므로 일반적으로 전역 적으로 사용합니다. Matlab을 한동안 사용하지 않았지만 선택한 변수 만 공유 해야하는 경우 Jupyter 또는 Zeppelin 인 경우 Apache Arrow 또는 Feather를 볼 수 있습니다.
Tagar
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.