ローカルファイルシステムからDBFSへの大容量ファイルのアップロードや大容量ファイルからテーブルを作成する際に、以下のようなエラーが発生することがあります。
Part number must be an integer between 1 and 10000, inclusive
パートの数は1から10000でなくてはなりません。と、これだけですと切り分けが難しいですよね。
以下のナレッジベースに詳細な説明と対策方法の記載があります。
原因
これはS3におけるセグメント数の制限です。分割されたファイルは1から10000の個数でなくてはなりません。
対策
この例外の発生を防ぐには、それぞれのパートファイルのサイズを増やしてください。
-
クラスターのSpark設定の以下のプロパティを設定してください。
spark.hadoop.fs.s3a.multipart.size 104857600
-
クラスターを再起動します。
つまり、S3へのマルチパートアップロードのパートの数の上限に引っかかっていたと言うことでした。
Maximum number of parts per uploadは10,000であり、上の設定でパートあたりのファイルサイズを大きくしてパート数を1万に収まるようにしないといけません。デフォルト値は10MB
です。
例えば、500GBのファイルからテーブルを作成しようとすると、5万弱のパートになるので、上述の制限の1万を超えてしまいます。spark.hadoop.fs.s3a.multipart.size
を50MBに設定すれば、パート数は1万になりますのでエラーを回避することができます。