2017-06-19 12 views
2

私は同じプレフィックスを持ついくつかのフォルダ(s3上)に編成された15万個以上の.csv.gzファイルを持っています。各ファイルのサイズは約550KBです。私の目標は、これらのファイルをすべて1つのDataFrameに読み込むことです。合計サイズは約80GBです。Spark 2.0.0:多くの.gzファイルを読み込みます

私は、まともなクラスタで、c4.8xlarge (36 vCPU、60 GiBメモリ、EBSストレージ:100 GiB)の3つのインスタンスを使用しています。

私はパスにワイルドカード文字を使用してファイルを読んでいます:

sc.textFile("s3://bucket/directory/prefix*/*.csv.gz") 

それから私はいくつかのマップの操作を行うと、私はtoDF("col1_name", "col2_name", "col3_name")を呼び出すことにより、データフレームにRDDを変換します。次に、新しい列を作成するためのUDFへの呼び出しをいくつか行います。

私がdf.show()と呼ぶとき、操作は長時間かかるし、決して終了しません。

なぜプロセスが非常に時間がかかるのだろうか?

多数の.csv.gzファイルが問題になっていますか?

答えて

3

.gzファイルはではなく、 splittableであり、結果として150Kのパーティションになります。スパークはではなく、のようになります:それはいくつかの10kのパーティションでさえ苦労します。

あなたは最初にHDFSにコピーするaws distcpまたはS3DistCpに見たいと思うかもしれません - して、多数のファイルを1つにglomsなどCombineFileInputFormatなどの適切なHadoop InputFormatを使用してファイルをバンドル。ここには、より多くのアイデアを持った古いブログがあります:http://inquidia.com/news-and-info/working-small-files-hadoop-part-3

関連する問題