2016-07-28 27 views
4

私はいくつかのjsonファイルからtarに圧縮してSpark RDDを作成しようとしています。 例えば、私は3つのファイル 複数のファイルを読み込み、tar.gzアーカイブでSparkに圧縮

file1.json 
file2.json 
file3.json 

を持っており、これらは archive.tar.gzに含まれています。

jsonファイルからデータフレームを作成したいとします。問題は、Sparkがjsonファイルを正しく読み取っていないことです。 sqlContext.read.json("archive.tar.gz")またはsc.textFile("archive.tar.gz")を使用してRDDを作成すると、文字化け/余分な出力が発生します。

Sparkに複数のファイルを含むgzipアーカイブを扱う方法はありますか?

UPDATE

私は物事が動作して取得することができたRead whole text files from a compression in Sparkへの回答で指定されたメソッドを使用しますが、この方法は、大tar.gz形式のアーカイブ(> 200メガバイト圧縮)などに適しているとは思えませんアプリケーションは大規模なアーカイブサイズで窒息します。私が扱っているアーカイブの中には、圧縮後に2GBまでのサイズがありますので、問題に対処するための効率的な方法があるのだろうかと思います。

私はアーカイブを解凍してからファイルを一緒にマージするのをやめようとしています。これは時間がかかるためです。

+0

私は大きなファイルで同じ問題に直面していますが、解決策を見つけましたか(手動で解凍してからスパークするのを除く)か? :) – ixaxaar

+0

@ixaxaar、私はすべてのtarアーカイブを、スパークがうまく動作するhadoopシーケンスファイルに変換してしまいました。 https://stuartsierra.com/2008/04/24/a-million-little-files – septra

+0

瓶に感謝します!私は実際には50個のtarファイルを持っており、それぞれには100万の小さな(json)ファイルがあります。D – ixaxaar

答えて

6

溶液は、Read whole text files from a compression in Sparkで与えられる。 提供されたコードのサンプルを使用して、私はそうのような圧縮アーカイブからのデータフレームを作成することができました:

この方法は、比較的小さなサイズのtarアーカイブのために正常に動作しますが、大きなアーカイブのサイズには適していません。したがって分割され、問題に対するより良い解決策はSequenceFilesをHadoopのためにtarアーカイブを変換するように思わ

、(tarアーカイブとは対照的に)。スパーク並列に読み出されて処理されることができる

参照: stuartsierra.com/2008/04/24/a-million-little-files

-1

すでに言及したように、* .tar.gzファイル内のファイルは圧縮されています。 3つのファイルを1つの圧縮tarファイルに入れることはできません。ファイルの解凍方法、tarアーカイブからの解凍方法、各ファイルの個別の読み込み方法については、インポート関数(テキストのみを検索しています)が期待しています。

sc.textfile関数とsqlcontext.read.json関数の両方が圧縮データを処理できないため、個々のjsonファイルを手動でアップロードすることをお勧めします。

関連する問題