2016-04-05 26 views
1

Bir dizinde fermuarlar var ve bunların her birini ayıklamak ve daha sonra bir dosyadan veya fermuarların içinde yatan iki veriden birini ayıklamak ve bir grafik DB'ye eklemek istiyorum. Her şey için sıralı bir python betiği yaptım, ama kıvılcımı dönüştürmek için sıkışıp kaldım. Tüm fermuarları bir HDFS dizinindedir. Ve o, DB'nin Neo4j olduğunu çiziyor. Henüz sparkle neo4j ile bağlantı kurmayı öğreniyorum ama daha başlangıç ​​aşamasında kaldım.pyspark içinde fermuarlar ile çalışma

Kodumun bu satırlarda olması gerektiğini düşünüyorum.

# Names of all my zips 
zip_names = ["a.zip", "b.zip", "c.zip"] 

# function extract_&_populate_graphDB() returns 1 after doing all the work. 
# This was done so that a closure can be applied to start the spark job. 
sc.parallelize(zip_names).map(extract_&_populate_grapDB).reduce(lambda a, b: a+b) 

Bunu sınamak için ne yapamıyorum, fermuarları ayıklamak ve içindeki dosyaları okumaktır. Zip'i sc.textFile ile okuyabiliyordum ama üzerinde take(1) çalıştıran onaltılık veriyi döndürdü.

Yani, bir zip içinde okumak ve veri ayıklamak mümkün mü? Ya da, verileri HDFS'ye koymadan önce çıkarmalı mıyım? Ya da bununla başa çıkmak için başka bir yaklaşım var mı?

+0

https://docs.databricks.com/spark/latest/data-sources/zip-files.html Yararlı olabilir –

cevap

0

güncellenmesi Cevap *

Eğer Gzip sıkıştırılmış dosyaları kullanmak isterseniz, size Kıvılcım kabuk yapılandırmak veya okuduğunuz ve sıkıştırılmış veri yazmasına izin işi Spark zaman ayarlayabilirsiniz parametreler vardır.

--conf spark.hadoop.mapred.output.compress=True \ 
--conf spark.hadoop.mapred.output.compression.codec=True \ 
--conf spark.hadoop.mapred.output.compression.codec=org.apache.hadoop.io.compress.GzipCodec \ 
--conf spark.hadoop.mapred.output.compression.type: BLOCK 

şu anda bir kabuk (örneğin pyspark) oluşturmak için kullandığınız bash komut olanlar ekleyin ve okumak ve sıkıştırılmış veri yazabilir.

Maalesef, no innate support of Zip files var, bu yüzden oraya ulaşmak için biraz daha ayak işi yapmanız gerekecek.