web-dev-qa-db-ja.com

Spark-フォルダーなしで単一のcsvファイルを書き込む方法は?

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 (フォルダーのフォルダーではなく)フォルダー内のファイル。

どんな助けも大歓迎です。

17
antonioACR1

可能な解決策は、Sparkデータフレームをpandasデータフレームに変換し、csvとして保存することです。

df.toPandas().to_csv("<path>/<filename>")
4
Paul Vbl

データフレームはありません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)に結合するドライバーで関数を作成する必要があります。

0
Ravi