より大きなファイルを出力するように AWS Glue ETL ジョブを設定する方法を教えてください。

最終更新日: 2020 年 3 月 16 日

AWS Glue ETL ジョブを設定して、多数の小さなファイルではなく少数の大きなファイルを出力したいです。どうすればよいですか?

解決方法

AWS Glue ETL ジョブの出力ファイル数を減らすには、次の方法のいずれかまたは両方を使用します。

groupSize パラメータの値を大きくする

動的フレームを使用する場合、および Amazon Simple Storage Service (Amazon S3) データセットに 50,000 を超えるファイルがある場合、グループ化は自動的に有効になります。デフォルトの groupSize 値は 1 MB です。この値を大きくすると、より大きな出力ファイルの作成が少なくなります。詳細については、より大きいグループの入力ファイル読み取りを参照してください。

次の例では、groupSize は 10485760 バイト (100 MB) に設定されています。

dyf = glueContext.create_dynamic_frame_from_options("s3", {'paths': ["s3://awsexamplebucket/"], 'groupFiles': 'inPartition', 'groupSize': '10485760'}, format="json")

coalesce() を使用する

Apache Spark .coalesce() 演算子を使用して、Amazon S3 に書き込む前に Spark 出力パーティションの数を減らします。これにより、出力ファイルの数が減少します。次の点にご注意ください。

  • coalesce() は Spark データシャッフルを実行し、ジョブの実行時間を大幅に増やすことができます。
  • パーティションの数を小さく指定すると、ジョブが失敗する場合があります。たとえば、coalesce(1) を実行すると、Spark はすべてのデータを 1 つのパーティションに配置しようとします。これにより、ディスク容量の問題が発生する可能性があります。

注意: repartition() を使用してパーティション数を減らすこともできます。ただし、repartition() はすべてのデータを再度シャッフルします。coalesce() 演算子では、既存のパーティションを使用してデータシャッフルの量を最小限に抑えます。

.coalesce() 演算子を使用して Spark パーティションの数を減らす方法:

1.    現在のパーティション数を確認します。

dynamic_frame.getNumPartitions()

2.    coalesce() を実行します。例:

dynamic_frame_with_less_partitions=dynamic_frame.coalesce(20)

この記事はお役に立ちましたか?

改善できることはありますか?


さらにサポートが必要な場合