当前位置: 首页 > 知识库问答 >
问题:

使用dataframe scala创建一个以时间戳为文件名的csv文件

祁坚壁
2023-03-14

我有一个数据框架,数据如下。

+---------------+-------+
|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和火花?此外,即使我试图创建文件与时间戳代码是创建一个目录与时间戳和在该目录内的csv与数据创建一个随机名称.我怎么能有时间戳文件名到这些csv文件,而不是创建一个目录?

共有2个答案

盖斌
2023-03-14

您应该使用src/main/资源,而不是./src/main/资源。您可以从命令行检查目录创建的权限。此外,直接在路径中使用LocalDateTime.now将类似于“2021-03-01T13:39:09.646”,不确定这是否是您想要的,甚至它是否对HDFS路径有效(像 [:]), 这样的字符也建议使用日期格式。

谢建业
2023-03-14

DF。写csv将始终使用指定的名称创建一个文件夹,并将输出的csv文件放置在该文件夹中。

如果您想要单个csv文件作为名称为时间戳的输出,那么您可以使用以下代码:

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"))
 类似资料:
  • 有可能创建使用[属性]配置添加时间戳到log4j2日志文件: 这将在。如何使用编程配置实现相同的行为?这就是我迄今为止所尝试的: 但这会产生以下文件:。因此,使用属性配置:使用编程创建的appender忽略当前日期的日志文件。

  • 我想创造一个新的世界。cmd文件,用于过滤所有。csv文件,然后创建一组。包含结果的csv文件。 下面是一个场景。 有很多。文件夹中的csv文件csv文件中的第一列数据包含一个代码在哪里可以是任何一组数字,范围从 我希望批处理文件在01开始XX,在那里找到HH?????-01,它取行并将结果放入名为的输出文件中 开始时的代码可能不同,因此它还必须过滤 然后对文件夹中的每个csv文件重复此操作。 然

  • 问题内容: 我知道在Java中不设置创建时间戳记是因为Linux没有它,但是有没有办法在Java中设置文件(Windows)的创建时间戳记?我在这里做了一个基本的修改时间戳编辑器。 问题答案: 我相信您有以下选择: 查找可以执行此操作并且可以从命令行调用的工具。然后,您可以通过Java代码与之交互。 以下来自MSDN File Times的链接显示了任何工具的工作方式-特别注意功能和。 在这里,我

  • 我在同一个文件夹中有数千个csv文件名,如下file_x_x.csv,其中x是1到10000之间的数字。每个文件包括一个标题和一行数据: file_1_1.csv 我的方法: 我不知道如何在最后创建一个唯一的文件。你能看一下上面的代码并告诉我如何获得所需的输出吗?如果我错过了什么?

  • 问题内容: 我想创建一个csv文件,但是当我运行代码时,它返回一个空白页,没有csv文件。我使用PHP5。我使用以下代码: 谢谢! 问题答案: 其空白,因为您正在写信。您应该写到using 代替,还应该发送标头信息以表明它是csv。 例

  • 问题内容: 我想用当前时间戳命名由Java应用程序创建的新文件。 我需要这方面的帮助。如何命名使用当前时间戳创建的新文件?我应该包括哪些课程? 问题答案: 无需太复杂,请尝试以下一种衬垫: