DataFrame'i farklı python çekirdekleri arasında yeniden yüklemekten kaçının


10

Değişkeni (büyük tablo / veri çerçevesi) bellekte tutmanın ve onu birden çok ipython not defterinde paylaşmanın bir yolu var mı?

Kavramsal olarak MATLAB'ın kalıcı değişkenlerine benzeyen bir şey arıyorum. Burada, birden fazla bağımsız düzenleyiciden (dizüstü bilgisayar) özel bir işlev / kitaplık çağırmak ve bu dış işlevin bazı sonuçları (veya büyük tablo) önbelleğe almasını sağlamak mümkündür.

Çoğunlukla, çok kullanılan bir tabloyu (dizüstü bilgisayarlardan çağrılan özel bir kitaplık aracılığıyla yüklenir) yeniden yüklemekten kaçınmak isterim, çünkü yeni bir analize başladığımda okumak 2-3 dakika sürer.


1
Bu mümkün görünmüyor ve dikkatli değilseniz çok fazla baş ağrısına neden olabilir. Verileri msgpack gibi verimli bir biçimde sürdürmek bir seçenek değil mi?
Emre

@Emre Teşekkürler. Msgpack ile zor bir kısmı, tabloyu okuma ihtiyacı altında yatan problemi çözmemesidir. Ayrıca çift kenarlı bir kılıçtır: Tablonun orijinal formatına kıyasla zamanın yaklaşık% 40'ını kurtarırken, manuel analizi orijinal verilerden (bu daha az temiz olan) küçük bir adım uzağa koyar
tsttst

Ben en iyi seçenek msgpack ile birlikte kullanılabilen redis gibi bir önbellek olduğunu düşünüyorum. En azından disk yerine belleğe devam edebilirsiniz.
Emre

1
Ben kullanmayı düşünün Tüyü - bu çok hızlı
MaxU

1
Spark ve önbellekleme bir seçenek olabilir mi? İlk okuma / işlemenizi
Spark'ı

Yanıtlar:


4

Kullanım durumlarınız için önemliyse, Apache Zeppelin'e geçmeyi deneyebilirsiniz. Tüm Spark dizüstü bilgisayarlar aynı Spark içeriğini, aynı Python çalışma ortamını paylaşıyor. https://zeppelin.apache.org/

Sorduğunuz şey Zeppelin'de doğal olarak oluyor. Veya tam olarak, tüm Spark dizüstü bilgisayarları arasında aynı Spark içeriğini / aynı Python ortamını paylaşma seçeneği (Zeppelin'de 'notlar' olarak adlandırılır):

Zeppelin'deki Spark Tercüman Paylaşımı seçenekleri

Böylece bağlamı Global (varsayılan Zeppelin'in davranışı), Not Başına (olası tek Jupyter davranışı) veya Kullanıcı Başına paylaşmayı seçebilirsiniz.

Zeppelin'e geçmek istemiyorsanız / istemiyorsanız, dizüstü bilgisayarlarınız arasında ortak veri çerçevelerini paylaşmanın diğer seçeneklerine bakın:

ps. Sen gelene kadar, (bu bir json dosyası olarak saklanan kendi dizüstü biçimi vardır) halen bugün itibariyle Zeppelin dosyaları ipynb alamıyor https://issues.apache.org/jira/browse/ZEPPELIN-1793 uygulanmaktadır; çoğu durumda bunları manuel olarak dönüştürmek zor olmasa da.


1
Teşekkür ederim. Muhtemelen ipython / jupyter not defterlerinden uzaklaşacağım. Zeppelin, yalnızca farklı tanımlayıcıların / not defterlerinin / notların içinde aynı şekilde adlandırılmış değişkenlerin içeriğini değil, yalnızca tanımlı değişkenlerin içeriğini seçici olarak paylaşma olanağını destekliyor mu? (
MATLAB'ın

Ne yazık ki hayır, bir süreç düzeyinde kontrol ediliyor. Yani ya hep ya hiç. Not Başına seçeneğini belirlerseniz, Jupyter'deki davranışla aynı olur. Global'i seçerseniz, her şeyi paylaşacaklar. Normalde, özellikle çok kullanıcılı ortamda daha az kaynak yoğun olduğu için Global olarak kullanıyoruz. Matlab'ı bir süredir kullanmadıysanız, ancak yalnızca seçilen değişkenler için paylaşım yapmanız gerekiyorsa - Jüpyter veya Zeppelin ise Apache Arrow veya Feather'a bakabilirsiniz.
Tagar
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.