有没有办法使用 .NET SPARK 更改导出文件名?

Posted

技术标签:

【中文标题】有没有办法使用 .NET SPARK 更改导出文件名?【英文标题】:Is there a way to change the export filename using .NET SPARK? 【发布时间】:2020-05-04 14:37:47 【问题描述】:

我正在尝试使用 .NET SPARK 将 Dataframe 导出到 CSV 文件,但我的导出文件具有默认名称“part-00000-GUID”,我想要的是根据我的操作来操作文件名业务规则,例如:'ABC_20200504.csv'。

这是我的代码:

string pathSource = Path.Combine(path, folderName);

exportDataFrame
                .Coalesce(1)
                .Write()
                .Option("header", "false")
                .Mode(SaveMode.Append)
                .Csv(pathSource);

我试图操纵 pa​​thSource,强制导出到“test.csv”,但使用这种方法,我总是会得到一个具有该名称的目录,并且该文件将位于文件夹“test.csv”中。

我真的需要一些解决方案,如果有人可以提供帮助,我将非常感激。

【问题讨论】:

将您的代码作为格式化为代码的文本放入您的问题中(使用编辑器中的特殊按钮)。不要将图像与源代码一起使用。在发布之前检查您的问题的预览。在这里,您的图片甚至没有显示在您的问题中。 @VadimS。我刚刚编辑了,谢谢你的评论。可以看看吗? 文本格式不是问题,我想将数据帧导出到 csv(它已经这样做了),我的问题是编辑文件名,因为 spark 总是自己创建名称。跨度> 【参考方案1】:

试试这个代码:

exportDataFrame
    .Repartition(1)
    .Write()
    .Mode("overwrite")
    .Format("com.databricks.spark.csv")
    .Option("header", "true")
    .Save("ABC_20200504.csv");

它必须创建单个文件输出为 \ABC_20200504.csv\part-00000

然后你可以像下面这个例子那样重命名文件 part-0000:

System.IO.File.Move("D:\\part-00000.txt", "D:\\ABC_20200504.txt");  

原始解决方案是用Scala 编写的,取自下面的链接并为C# 编辑:https://www.dataneb.com/post/how-to-write-single-csv-file-using-spark 该链接描述了 5 种方法如何写入单个 CSV 文件。

【讨论】:

感谢您的评论,但这是针对 python 的吧?对于 C# .net 核心框架,我没有那个导入。您知道 .NET 的任何解决方案吗?谢谢。 你能试试下面的代码,让我知道你有什么结果吗?此评论中的代码最初是用 Scala 编写的,并针对 .NET 进行了更改。我现在没有检查 .NET 的环境,所以我假设它可能会有所帮助(代码取自这里 ***.com/questions/31674530/…):exportDataFrame.Coalesce(1).Write().Format("com. databricks.spark.csv") .Option("header", "true") .Save("ABC_20200504.csv") 同样的结果,它会创建一个文件夹“mydata.csv”,其中包含 part-00000-GUID.csv 文件。我认为唯一的解决方案是选择使用该类型名称生成的所有文件并根据我的业务规则更改它们的名称。这是我现在正在开发的方法。 从我刚刚发布的更新答案中尝试解决方案。它与以前的方法不同。看来我现在只能提议了。 Spark(和 Hive)不喜欢在文件级别操作,但更喜欢在文件夹级别操作并将文件用作“横向扩展范围”。我在 .NET 中为 Azure Synapse 上的 Spark 运行了 Vadim 的代码,它工作正常。然后您需要重命名该文件。

以上是关于有没有办法使用 .NET SPARK 更改导出文件名?的主要内容,如果未能解决你的问题,请参考以下文章

有没有办法阻止 NSFilemanger 导出数据和创建文件夹?

有没有办法将 powerbuilder 应用程序导出为文本?

从报表查看器导出时更改 PDF 上的报表名称

有没有办法更改每个分区文件夹的输出行数?

将具有无效字符的嵌套字段从 Spark 2 导出到 Parquet [重复]

将信息导出到 xlsm 文件,C# VS asp.net