2016-11-24 90 views
2

我有數據幀,並且我想保存在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文件。

是可能的嗎?

任何幫助感激

+0

的唯一辦法,據我所知,是你這樣做 – elmalto

+2

之前這是不可能重新分區到分區1!請檢查答案在[此鏈接](http://stackoverflow.com/questions/40577546/how-to-save-rdd-data-into-json-files-not-folders/40577736#40577736) – mrsrinivas

回答

5

它使用標準的火花庫是不可能的,但你可以使用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)