2017-01-16 14 views
0

私はsparkで180.000以上のxmlsを読み込み、それぞれの解析プロセスを開始して、最終的にcsvファイルをテーブルとして取得します。 これらのxmlはbz2ファイルで圧縮されています。 私はこのbz2: の2つのバージョンがあり、1つに連結されたxmls(それぞれ30mb)と1つのxmlsが含まれていることを知っています。 問題がsparkでxmlファイルの非常に大きなデータセットを読む

sc.textFile(hdfs_input_path).persist(pyspark.StorageLevel.MEMORY_AND_DISK) 

連結XMLバージョンを読み取るために、次のコードを使用してと

sc.newAPIHadoopFile(path, "org.apache.hadoop.mapreduce.lib.input.TextInputFormat", "org.apache.hadoop.io.LongWritable", "org.apache.hadoop.io.Text", conf={"textinputformat.record.delimiter": '\n\n'}).map(lambda num_line: num_line[1])

java.io.IOException: Too many bytes before newline rethemを持つ単一のXMLSバージョンを読み込むときに、私は、エラーをエグゼキュータが迷子ということです

sc.newAPIHadoopFile(path, "org.apache.hadoop.mapreduce.lib.input.TextInputFormat", "org.apache.hadoop.io.LongWritable", "org.apache.hadoop.io.Text", conf={"textinputformat.record.delimiter": '</delimiter>'}).map(lambda num_line: num_line[1]) 

それだけでxmlファイルの数時々作品近似的に180.000ほど大きすぎるわけではありません。

私の質問は、bz2圧縮ファイル形式で上記の作業をどのように達成できますか? (Gzipは分割可能ではありません...) bz2で圧縮を忘れてしまいましょう、これを行う別の方法はありますか? 283.20ギガバイトの物理メモリと42 VCoresと私は自分の問題を解決し

+0

180.000のxmlファイルがありますか?各ファイルは30MBですか?あなたは一括してバッチをロードし、各バッチを処理しようとすることができます –

+0

@ NarendraParmar入力が生のXMLファイルです。出力として私はハイブの11のテーブルに対応する11の.csvファイルを持っています。 – sdikby

答えて

0

6つのアクティブノードとCDH 5.7.0を使用して

Iamは。私はbz2ファイルに圧縮xmlファイルを持っているように、私は、区切り文字になるように火花がconf={"textinputformat.record.delimiter": '<\delimiter>'}で後xmlsを分離し、その後、私は分離xmls、すなわちいくつかの未使用のタグを削除することなどをきれいにするために、いくつかの.map()または.filter()操作を追加を変更した

しかし、一般的なpysparkのデバッグは簡単な作業ではないので、私はなぜこのようなエラーが出るのか分かりませんでした。