PySpark kullanıyorum. S3'e ulaşmam, dönüştürmem ve sonra da parka s3'e ihraç etmem gereken s3 üzerinde gziped json dosyaları var. Her json dosyası yaklaşık 100k satır içerir, bu yüzden çok fazla anlam ifade etmeyecektir (fakat buna paralel olarak açılıyorum), fakat paralelleştirdiğim yaklaşık 5k dosya var. Benim yaklaşımım, json dosya listesini komut dosyasına geçiriyor -> listeye paralel koş -> run map (? Burası engellendiğim yerdir). jsonun dönüştürülmüş jsondan bir DF oluşturmasına ve onu parke olarak s3'e nasıl aktaracağım ve dönüştürebileceğim.kıvrık çalışan işlerde kıvılcım ile çalışan
cevap
Json'u dağıtılmış bir şekilde okumak için, bahsettiğiniz gibi anahtarlarınızı paralel hale getirmeniz gerekecektir. Bunu s3'ten okurken yapmak için boto3'ü kullanmanız gerekir. Aşağıda bunun nasıl yapılacağının bir iskelet taslağıdır. Kullanım durumunuza uyacak şekilde dağıtılmış JsonRead'i değiştirmeniz gerekecektir.
import boto3
import json
from pyspark.sql import Row
def distributedJsonRead(s3Key):
s3obj = boto3.resource('s3').Object(bucket_name='bucketName', key=key)
contents = json.loads(s3obj.get()['Body'].read().decode('utf-8'))
return Row(**contents)
pkeys = sc.parallelize(keyList) #keyList is a list of s3 keys
dataRdd = pkeys.map(distributedJsonRead)
Boto3 Referans: http://boto3.readthedocs.org/en/latest/guide/quickstart.html
Düzenleme: 1 adrese:
Daha sonra çıkış dosyalarına girdi dosyalarının 1 eşleştirmesini, birleştirilmiş parke veri setini sahip daha kolay olacağını olasıdır birlikte çalışmak. json 1 eşleştirmesini için: Bu bunu yapmak için gereken yoldur Ama eğer sana bir 1 isterseniz bu işlemleri paralel hale mümkün olmayacaktır sanmıyorum bu
for k in keyList:
rawtext = sc.read.json(k) # or whichever method you need to use to read in the data
outpath = k[:-4]+'parquet'
rawtext.write.parquet(outpath)
gibi bir şey deneyebilirsiniz parke dosyaları. Spark'in okuma/yazma işlevi, sürücü tarafından çağrılacak şekilde tasarlanmıştır ve sc ve sqlContext'e erişmeye ihtiyaç duyar. Bu, 1 parke dizinine sahip olmanın yolunun muhtemelen başka bir nedenidir.
ama aynı zamanda parkenin hangi dosyadan üretildiğini bilmek istiyorum, yani jsonun s3: // bucket/json/12/3/abc.json'da olduğunu varsayalım, sonuç s3: // bucket/json/12/3/abc.parquet' – Sar009
@ Sar009 Bu – David
adresine yanıtımı düzenledim, günde yaklaşık 20 GB veri üretildi. Ve genellikle bu konuda bir ya da iki veriyi analiz etmek zorundayım. Yani temelde, dosya okumasını paralelleştiremediğimi söylüyorsun. – Sar009
- 1. kıvılcım bağımsız kümesi, bir çalıştırıcıda çalışan iş
- 2. Python 3 yerine python 2 ile çalışan kıvılcım.
- 3. AspectJ ile çalışan Newbie:
- 4. Ironpython ile çalışan modül listesi
- 5. Çalışan Blanket.js
- 6. spark (Çalışan düğümlerindeki uygulama klasörlerini temizle)
- 7. Hata - GCC çalışan MSVC
- 8. Android'de çalışan docker
- 9. Çalışan Nesneyi Anlamak Tablo
- 10. hesapla çalışan bakiyesi
- 11. Cordova Android'de çalışan uygulama, ancak iplik Android'de çalışan
- 12. Komut satırı olmadan ator ile çalışan görev,
- 13. Hata çalışan ünite testleri ile karma
- 14. Mongoid ile iyi çalışan Formtastic alternatif
- 15. xvfb-run ile çalışan firefox (Selenium WebDriver)
- 16. Selenium'u birden çok örümcek ile başsız çalışan
- 17. Veritabanında çalışan python ile nasıl başlamalıyım?
- 18. Çalışan Apache ile Çalışıyor Tomcat -XDB
- 19. Ekran olmadan firefox ile çalışan selenium
- 20. Macun: Nohup ile çalışan işlemden bilgi al
- 21. Neden UserThread ScheduleExecutorService ile çalışan çöp toplamaz
- 22. Admob ile AdWhirl'i kullanmaya çalışan hatalar
- 23. SVN 1.7 ile çalışan Delphi SVN entegrasyonu?
- 24. Ninja ve WebApi ile çalışan InRequestScope'u Kullanma
- 25. mp üzerinde çalışan php
- 26. Görünmez çalışan iPhone simulator
- 27. Linq - listelerin listelerinde çalışan
- 28. Android: zaten çalışan hizmet
- 29. Javascript'ten .exe çalışan
- 30. Çalışan hizmetler nasıl durdurulur?
Bir okuyucunun yollarının birleştirilmiş bir koma listesini iletebilirsiniz. – zero323
Kıvılcım kurulumunuza bağlı olarak, s3'ü şu şekilde kıvılcımdan okuyabilirsiniz: rawtext = sc.textFile ('s3: // bucket/file') ' – Paul
Parke döktüğümde her json karşısında olmalı anlam 1.json => 1. parşömen, ben virgül dosya isimleri virgülle eğer bu tutarlılık kaybolacaktır. – Sar009