データフレームがあり、S3で.csvファイルを作成します。次のコードを使用します。
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly",mode='overwrite',header=True)
.csvファイルをproduct_profit_weeklyフォルダーに配置しますが、S3で.csvファイルの名前が変わった時点で、書き込むときにファイル名を選択することはできますか?
すべてのsparkデータフレームライター(df.write .___)は、単一のファイルに書き込むのではなく、パーティションごとに1つのチャンクを書き込みます。取得するディレクトリは次のようになります。
df.coalesce(1).write.csv("dbfs:/mnt/mount1/2016//product_profit_weekly
と呼ばれる内部の1つのファイル
part-00000
この場合、非常に非効率的で「スパーク」ではない可能性のあることを実行しています。つまり、すべてのデータフレームパーティションを1つにまとめているため、タスクは実際には並行して実行されません。
これは別のモデルです。すべてのspark並列化を利用するには、これは合体しないことを意味し、あるディレクトリに並列に書き込みます。
100個のパーティションがある場合、次のようになります。
part-00000
part-00001
...
part-00099
1つのフラットファイルにすべてが必要な場合は、事後にそれをマージする小さな関数を記述します。これは、scalaで行うか、bashで次のように行うことができます。
cat ${dir}.part-* > $flatFilePath