2016-04-05 2 views
1

У меня есть n zips в каталоге, и я хочу извлечь каждый из них, а затем извлечь некоторые данные из файла или два, лежащие внутри zip-файлов, и добавить их в DB-диаграмму. Я выполнил последовательный скрипт python для всего этого, но я застрял в его преобразовании для искры. Все мои zip-файлы находятся в каталоге HDFS. И, он граф DB - Neo4j. Мне еще предстоит узнать о подключении искры с neo4j, но я застрял на более раннем этапе.Работа с zip-файлами в pyspark

Я думаю, что мой код должен быть вдоль этих линий.

# 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) 

Что я не могу сделать, чтобы проверить это, как извлечь zip-файлы и прочитать файлы внутри. Я смог прочитать zip на sc.textFile, но при запуске take(1) на нем он получил шестнадцатеричные данные.

Итак, можно ли читать в zip и извлекать данные? Или я должен извлечь данные перед тем, как поместить их в HDFS? Или, может быть, есть другой подход, чтобы справиться с этим?

+0

https://docs.databricks.com/spark/latest/data-sources/zip-files.html Может быть полезно –

ответ

0

Обновление ответа *

Если вы хотите использовать GZIP сжатых файлов, есть параметры, которые можно установить при настройке Спарк оболочки или Спарк работу, которая позволит вам читать и писать сжатые данные.

--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 

Добавить те в Баш скрипт вы используете для создания оболочки (например, pyspark), и вы можете читать и писать сжатые данные.

К сожалению, есть no innate support of Zip files, так что вам нужно будет немного поработать, чтобы добраться туда.