2016-12-07 12 views
0

DataFrameWriterを使用してS3に書き出すデータセットがあります。私は、Parquetを使用しており、256個の異なる値を持つカラムに対してpartitionByコールを行っています。それはうまくいくが、データセットを書き出し(そして他のジョブに読み込む)には時間がかかる。デバッグでは、ライターは、私のrepartition呼び出しが256個のパーティションを指定しているにもかかわらず、サフィックスごとに1つずつ、256個のファイルしか出力しないことに気付きました。それぞれのpartitionBy値のファイル出力数を増やす方法はありますか?SparkでDataFrameWriterを使用する出力ファイルの数を変更

私のコードは次のようになります。私のコードで

myDS = myDS.repartition(256, functions.col("suffix")); 
myDS.write().partitionBy("suffix").parquet(String.format(this.outputPath, "parquet", this.date)); 

答えて

1

問題は、私のrepartitionコールで列を指定するの存在でした。 repartitionから列を削除するだけで問題が解決しました。

出力ファイルの数とpartitionByの値の関係は、パーティションの数に直接関係します。 256個の別個の値があるとします。あなたの作家の前にrepartition(5)コールがある場合は、partitionByの値ごとに最大5つの出力ファイルが作成されます。出力ファイルの総数は1280を超えません(しかし、指定されたpartitionBy値のデータがあまりない場合は少なくなります)。