Spark数据帧保存在hdfs位置的单个文件中

时间:2016-11-24 18:01:58

标签: csv apache-spark dataframe databricks

我有数据框,我想在hdfs位置保存在单个文件中。

我在这里找到了解决方案Write single CSV file using spark-csv

int factorial(int a) {
    int facts = 1;

    for (int i = 2; i <= a; i++) {
        facts *= i;
    }
    return facts;
}

但所有数据都将写入mydata.csv / part-00000,我想成为mydata.csv文件。

可能吗?

任何帮助欣赏

1 个答案:

答案 0 :(得分:10)

使用标准spark库是不可能的,但您可以使用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)