2016-04-05 17 views
1

私はディレクトリにn個のzipを持っていますが、それらのそれぞれを抽出し、zip内にあるファイルまたは2つのデータからいくつかのデータを抽出してグラフDBに追加したいとします。私はこの全部のために逐次的なpythonスクリプトを作ったが、私はそれをsparkのために変換することに固執している。私のzipはすべてHDFSディレクトリにあります。そして、グラフDBはNeo4jです。私はまだneo4jとスパークを接続することについて学んでいますが、私はより初期のステップで立ち往生しています。pysparkでzipを操作する

私のコードはこれらの行に沿っているべきだと思っています。

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

これをテストするために何ができるのかは、ジップを抽出し、その中のファイルを読み取る方法です。私はsc.textFileによってジップを読むことができましたが、それにtake(1)を実行すると、16進データを返しました。

ですから、ジップで読み込んでデータを抽出することは可能ですか?または、データを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)とあなたが圧縮されたデータを読み書きすることができますbashスクリプトにそれらを追加します。

残念ながら、no innate support of Zip filesがありますので、そこに行くために少し足を踏み入れる必要があります。