Spark= DF CSVファイルをディスクに保存したい。InSpark 2.0.0+ 、DataFrame(DataSet[Rows])
をDataFrameWriter
として変換し、.csv
ファイルを書き込む方法。
関数は次のように定義されます
def csv(path: String): Unit
path : the location/folder name and not the file name.
Sparkは、csvファイルを、part-*。csvという名前のCSVファイルを作成することで指定された場所に保存します。
Part-*。csvの代わりに指定されたファイル名でCSVを保存する方法はありますか?または、part-rの代わりにprefixを指定できますか?
コード:
df.coalesce(1).write.csv("sample_path")
現在の出力:
sample_path
|
+-- part-r-00000.csv
望ましい出力:
sample_path
|
+-- my_file.csv
注:合体機能は単一のファイルを出力するために使用され、エグゼキュータはDFをメモリエラーなしで収集するのに十分なメモリを持っています。
Sparkのsave
で直接実行することはできません
SparkはHadoop File Formatを使用しますが、これにはデータのパーティション化が必要です-だからpart-
ファイル。 this 質問のように、処理後にファイル名を簡単に変更できます
Scalaでは次のようになります。
import org.Apache.hadoop.fs._;
val fs = FileSystem.get(sc.hadoopConfiguration);
val file = fs.globStatus(new Path("path/file.csv/part*"))(0).getPath().getName();
fs.rename(new Path("csvDirectory/" + file), new Path("mydata.csv"));
fs.delete(new Path("mydata.csv-temp"), true);
あるいは単に:
import org.Apache.hadoop.fs._;
val fs = FileSystem.get(sc.hadoopConfiguration());
fs.rename(new Path("csvDirectory/data.csv/part-0000"), new Path("csvDirectory/newData.csv"));
編集:コメントで述べたように、独自のOutputFormatを作成することもできます。ファイル名を設定するこのアプローチについて information のドキュメントを参照してください