2016-11-24 11 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") 

が見つかりましたが、すべてのデータが一部-00000/mydata.csvに書き込まれますと私はmydata.csvファイルになりたかったです。

は可能ですか?一時ディレクトリに出力を保存して、要求されたパスにファイルを移動 -

すべてのヘルプは、それが標準スパークライブラリを使用して可能ではないですが、あなたは、ファイルシステムを管理するためのHadoopのAPIを使用することができます

+0

唯一の方法は、私の知る限りでは、この – elmalto

+2

を行うことは可能ではありません前に1つのパーティションに再パーティションすることです! plsは[このリンク](http://stackoverflow.com/questions/40577546/how-to-save-rdd-data-into-json-files-not-folders/40577736#40577736)で答えを確認します。 – mrsrinivas

答えて

5

を感謝しています。 (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) 
関連する問題