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.
Harika! Teşekkürler @ zero323. İnançlarımı onaylıyor ... –