加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 将DataFrame另存为CSV时指定文件名

发布时间:2020-12-16 08:58:46 所属栏目:安全 来源:网络整理
导读:参见英文答案 Spark dataframe save in single file on hdfs location ????????????????????????????????????1个 假设我有一个Spark DF,我想将其保存到磁盘CSV文件.在Spark 2.0.0中,可以将DataFrame(DataSet [Rows])转换为DataFrameWriter,并使用.csv方法编
参见英文答案 > Spark dataframe save in single file on hdfs location ????????????????????????????????????1个
假设我有一个Spark DF,我想将其保存到磁盘CSV文件.在Spark 2.0.0中,可以将DataFrame(DataSet [Rows])转换为DataFrameWriter,并使用.csv方法编写该文件.

该功能定义为

def csv(path: String): Unit
    path : the location/folder name and not the file name.

Spark将csv文件存储在指定位置,方法是创建名称为part – * .csv的CSV文件.

有没有办法用指定的文件名而不是部分保存CSV – * .csv?或者可以指定前缀而不是part-r?

代码:

df.coalesce(1).write.csv("sample_path")

电流输出:

sample_path
|
+-- part-r-00000.csv

期望的输出:

sample_path
|
+-- my_file.csv

注意:coalesce函数用于输出单个文件,执行程序有足够的内存来收集DF而没有内存错误.

解决方法

在Spark的保存中直接进行是不可能的

Spark使用Hadoop文件格式,这需要对数据进行分区 – 这就是您拥有部分文件的原因.您可以在处理后轻松更改文件名,就像在this问题中一样

在Scala中它看起来像:

import org.apache.hadoop.fs._;
val fs = FileSystem.get(sc.hadoopConfiguration);
val file = fs.globStatus(new Path("path/file.csv/part*"))(0).getPath().getName();

fs.rename(new Path("csvDirectory/" + file),new Path("mydata.csv"));
fs.delete(new Path("mydata.csv-temp"),true);

要不就:

import org.apache.hadoop.fs._;
val fs = FileSystem.get(sc.hadoopConfiguration());
fs.rename(new Path("csvDirectory/data.csv/part-0000"),new Path("csvDirectory/newData.csv"));

编辑:如评论中所述,您也可以编写自己的OutputFormat,请参阅有关此方法设置文件名的information文档

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读