我有一个数据如下的数据框。
+---------------+-------+
|category |marks |
+---------------+-------+
|cricket |1.0 |
|tennis |1.0 |
|football |2.0 |
+---------------+-------+
我想将上述数据帧写入一个csv文件,在其中将使用当前时间戳创建文件名。
generatedDataFrame.write.mode ("append")
.format("com.databricks.spark.csv").option("delimiter", ";").save("./src/main/resources-"+LocalDateTime.now()+".csv")
但是此代码无法正常工作。出现以下错误
java.io.IOException: Mkdirs failed to create file
有没有更好的方法使用scala和spark实现此目的?另外,即使我尝试使用时间戳代码创建文件,也正在创建带有时间戳的目录,并且在该目录内使用随机名称创建带有数据的csv。如何将时间戳文件名包含在这些csv文件中,而不是创建目录?
DF.write.csv将始终使用您指定的名称创建一个文件夹,并将输出的csv文件放置在该文件夹中。
如果您想将单个csv文件作为名称为timestamp的输出,则可以使用以下代码:
import java.text.SimpleDateFormat
import java.util.Date
import org.apache.spark.sql._
import org.apache.hadoop.fs.{FileSystem, Path}
val spark = SparkSession.builder().master("local[*]").getOrCreate()
spark.sparkContext.setLogLevel("ERROR")
val fs = FileSystem.get(spark.sparkContext.hadoopConfiguration)
generatedDataFrame.coalesce(1).write.mode("append").csv("./src/main/resources/outputcsv/")
val outFileName = fs.globStatus(new Path("./src/main/resources/outputcsv/part*"))(0).getPath.getName
val timestamp = new SimpleDateFormat("yyyyMMddHHmm").format(new Date())
fs.rename(new Path(s"./src/main/resources/outputcsv/$outFileName"), new Path(s"./src/main/resources/outputcsv/${timestamp}.csv"))
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句