ant*_*CR1 20 csv export-to-csv apache-spark
假设这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并调用实际的CSV文件name.csv而不是part-00000-af091215-57c0-45c4-a521-cd7d9afb5e54.csv.原因是我需要编写几个CSV文件,稍后我将用Python一起阅读,但我的Python代码使用实际的CSV名称,还需要将所有单个CSV文件放在一个文件夹中(而不是文件夹)的文件夹).
任何帮助表示赞赏.
小智 5
一种可能的解决方案是将 Spark 数据帧转换为 Pandas 数据帧并将其保存为 csv:
df.toPandas().to_csv("<path>/<filename>")
Run Code Online (Sandbox Code Playgroud)
如果您只想使用 python 标准库,这是一个简单的函数,可以写入单个文件。您不必弄乱临时文件或通过另一个目录。
import csv
def spark_to_csv(df, file_path):
""" Converts spark dataframe to CSV file """
with open(file_path, "w") as f:
writer = csv.DictWriter(f, fieldnames=df.columns)
writer.writerow(dict(zip(fieldnames, fieldnames)))
for row in df.toLocalIterator():
writer.writerow(row.asDict())
Run Code Online (Sandbox Code Playgroud)
lea*_*ner -6
df.write.mode("overwrite").format("com.databricks.spark.csv").option("header", "true").csv("PATH/FOLDER_NAME/x.csv")
Run Code Online (Sandbox Code Playgroud)
你可以使用这个,如果你不想每次都给出 CSV 的名称,你可以编写 UDF 或创建一个 CSV 文件名数组并将其提供给它,它将起作用