将火花数据帧保存在hdfs位置上的单个文件中
问题描述:
我有数据帧,并且我想保存在hdfs位置上的单个文件中。将火花数据帧保存在hdfs位置上的单个文件中
,我发现这里的解决方案Write single CSV file using spark-csv
df.coalesce(1)
.write.format("com.databricks.spark.csv")
.option("header", "true")
.save("mydata.csv")
但是,所有数据将被写入到mydata.csv /部分00000和我想成为mydata.csv文件。
是可能的吗?
任何帮助感激
答
它使用标准的火花库是不可能的,但你可以使用Hadoop的API来管理文件系统 - 保存输出临时目录,然后将文件复制到请求的路径。例如(在pyspark):
df.coalesce(1) \
.write.format("com.databricks.spark.csv") \
.option("header", "true") \
.save("mydata.csv-temp")
from py4j.java_gateway import java_import
java_import(spark._jvm, 'org.apache.hadoop.fs.Path')
fs = spark._jvm.org.apache.hadoop.fs.FileSystem.get(spark._jsc.hadoopConfiguration())
file = fs.globStatus(sc._jvm.Path('mydata.csv-temp/part*'))[0].getPath().getName()
fs.rename(sc._jvm.Path('mydata.csv-temp/' + file), sc._jvm.Path('mydata.csv'))
fs.delete(sc._jvm.Path('mydata.csv-temp'), True)
的唯一办法,据我所知,是你这样做 – elmalto
之前这是不可能重新分区到分区1!请检查答案在[此链接](http://stackoverflow.com/questions/40577546/how-to-save-rdd-data-into-json-files-not-folders/40577736#40577736) – mrsrinivas