df
がSparkのデータフレームであるとします。 df
を単一のCSVファイルに書き込む方法は次のとおりです。
df.coalesce(1).write.option("header", "true").csv("name.csv")
これにより、name.csv
というフォルダーに含まれるCSVファイルにデータフレームが書き込まれますが、実際のCSVファイルはpart-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv
のような名前になります。
フォルダname.csv
を避け、name.csv
ではなくpart-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv
と呼ばれる実際のCSVファイルを作成できるかどうかを知りたいです。理由は、後でPythonで一緒に読み込むいくつかのCSVファイルを作成する必要があるためですが、私のPythonコードは実際のCSV名を使用し、単一のCSV (フォルダーのフォルダーではなく)フォルダー内のファイル。
どんな助けも大歓迎です。
可能な解決策は、Sparkデータフレームをpandasデータフレームに変換し、csvとして保存することです。
df.toPandas().to_csv("<path>/<filename>")
データフレームはありませんspark書き込み操作の結果としてディレクトリの代わりに単一のファイルを書き込み/作成するAPI。
両方のオプションの下では、ディレクトリ内に標準ファイル(_SUCCESS , _committed , _started)
。
1. df.coalesce(1).write.mode("overwrite").format("com.databricks.spark.csv").option("header",
"true").csv("PATH/FOLDER_NAME/x.csv")
2. df.repartition(1).write.mode("overwrite").format("com.databricks.spark.csv").option("header",
"true").csv("PATH/FOLDER_NAME/x.csv")
Coalesce(1)またはrepartition(1)を使用せず、ファイルの書き込みにスパークの並列性を利用すると、ディレクトリ内に複数のデータファイルが作成されます。
書き込み操作が完了すると、すべてのデータファイルパーツを単一のファイル(cat part-00000 * singlefilename)に結合するドライバーで関数を作成する必要があります。