2016-03-26 13 views
4

Verilerim, Python 3 paketlenmiş dosya kümeleri olarak bulunur. Çoğu Pandalar DataFrames serileştirme.Kıvılcım okuma python3 turşu girdi olarak

Spark'i kullanmaya başlamak istiyorum çünkü bir bilgisayarın sahip olabileceği daha fazla belleğe ve CPU'ya ihtiyacım var. Ayrıca, dağıtılmış depolama için HDFS kullanacağım.

Bir başlangıç ​​olarak, girdi dosyası olarak turşu dosyalarının nasıl kullanılacağını açıklayan ilgili bilgileri bulamadım.

Var mı? Yoksa, herhangi bir geçici çözüm var mı?

Teşekkür

cevap

6

Bir çok veri kendisine bağlıdır çok. Genel olarak konuşan Spark, büyük, bölünemez dosyaları okumak gerektiğinde özellikle iyi performans göstermez. Yine de, binaryFiles yöntemini kullanmayı deneyebilir ve standart Python araçlarıyla birleştirebilirsiniz.

import tempfile 
import pandas as pd 
import numpy as np 

outdir = tempfile.mkdtemp() 

for i in range(5): 
    pd.DataFrame(
     np.random.randn(10, 2), columns=['foo', 'bar'] 
    ).to_pickle(tempfile.mkstemp(dir=outdir)[1]) 

Sonraki biz bianryFiles yöntemi kullanarak okuyabilirsiniz:

rdd = sc.binaryFiles(outdir) 

ve bireysel nesneler serisini:

import pickle 
from io import BytesIO 

dfs = rdd.values().map(lambda p: pickle.load(BytesIO(p))) 
dfs.first()[:3] 

##   foo  bar 
## 0 -0.162584 -2.179106 
## 1 0.269399 -0.433037 
## 2 -0.295244 0.119195 

Önemli bir not genellikle gerektirir bir kukla verilerle başlayalım textFile gibi basit bir yöntemden önemli ölçüde daha fazla bellek.

Başka bir yaklaşım, yalnızca yolların paralelleştirilmesi ve hdfs3 gibi dağıtılmış bir dosya sisteminden doğrudan okunabilen kitaplıkları kullanmasıdır. Bu tipik olarak, önemli ölçüde daha kötü bir veri lokalinin fiyatına düşük bellek gereksinimleri anlamına gelir.

Bu iki gerçek göz önünde bulundurulduğunda, verilerinizi daha yüksek bir tanecikle yüklenebilecek bir biçimde serileştirmek genellikle daha iyidir.

Not:

SparkContext

pickleFile yöntem sağlar, ancak bu ad yanıltıcı olabilir. Düz Python turşuları değil, turşu nesneleri içeren SequenceFiles okumak için kullanılabilir.

+0

Harika! Teşekkürler @ zero323. İnançlarımı onaylıyor ... –