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文档 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |