s3に格納された一連のテキストファイルに対して、ファイルごとに1行のスパークRDDを作成しようとしています。テキストファイルの内容を取得するためにAmazonS3
のインスタンスを作成してこれを行います。それはスパークのマップ機能で使用できるように、私は、このS3クライアントの周りにシリアライズ可能なラッパーを作成しました:すべてのマップ呼び出しでオブジェクトを逆シリアル化する
class SerializableAmazonS3 implements java.io.Serializable {
public transient AmazonS3 client;
public AmazonS3 create()
{
AmazonS3ClientBuilder builder = AmazonS3Client.builder().withRegion(REGION).withCredentials(new ProfileCredentialsProvider());
return builder.build();
}
private void readObject(ObjectInputStream ois) {
this.create();
}
}
私がいる問題は、火花が機能(行ごとに毎回readObject
を呼び出すことです
S3ファイルシステムクライアントの使用に関するいくつかのパフォーマンス上の問題があると聞いていました。特に小さなファイルをたくさんダウンロードすることで。 [例についてはこちらを参照](http://tech.kinja.com/how-not-to-pull-from-s3-using-apache-spark-1704509219) –
私はそれを打つつもりです。 –
小さなファイルの場合、GETを介してファイルを開くために費やされた時間>読み込み時間。 0.4c/GETのようなものも請求されますので、何千もの小さなファイルは必要ありません。パーティション化可能なファイル形式にマージすることをお勧めします。 Hadoop harは処理可能な.tarファイルのようなものですが、Spark&S3でやったことはありません –