我该如何使用Scala将Spark的DataFrame导出为CSV文件?
在Spark 2+版本中,您可以简单地使用以下内容:
df.write.csv("/your/location/data.csv")
如果您想确保文件不再分区,则可以添加如下.coalesce(1)
来完成;df.coalesce(1).write.csv("/your/location/data.csv")
上面的解决方案将CSV导出为多个分区。我在这个stackoverflow页面上找到了另一个解决方案,由zero323提供。当您使用coalesce
时,它会将数据帧导出为一个单独的CSV文件。
df.coalesce(1)
.write.format("com.databricks.spark.csv")
.option("header", "true")
.save("/your/location/mydata")
这将创建一个名为mydata
的目录,在其中你将找到一个包含结果的csv
文件。
导出并重命名文件的方法:
def export_csv(
fileName: String,
filePath: String
) = {
val filePathDestTemp = filePath + ".dir/"
val merstageout_df = spark.sql(merstageout)
merstageout_df
.coalesce(1)
.write
.option("header", "true")
.mode("overwrite")
.csv(filePathDestTemp)
val listFiles = dbutils.fs.ls(filePathDestTemp)
for(subFiles <- listFiles){
val subFiles_name: String = subFiles.name
if (subFiles_name.slice(subFiles_name.length() - 4,subFiles_name.length()) == ".csv") {
dbutils.fs.cp (filePathDestTemp + subFiles_name, filePath + fileName+ ".csv")
dbutils.fs.rm(filePathDestTemp, recurse=true)
}}}
cp <旧文件路径> <新文件路径>
(或者如果文件仍在hdfs中,则使用hdfs dfs -cp <旧文件路径> <新文件路径>
)将文件复制到其当前位置,但使用新名称。 - Taylrl