Spark Save始终保存输出的最后一行

时间:2018-08-10 10:22:56

标签: java apache-spark apache-spark-sql

我正在使用csv文件中的输入进行一些计算,并将结果数据帧按顺序保存到csv文件中,但是每次创建新文件时,它仅将最后一个数据帧保存到csv文件中。

数据框的示例代码:

Path dateFilePath=new Path("Dates.csv");
        FileSystem fileSystem=FileSystem.get(configuration);
        BufferedReader br=new BufferedReader(new InputStreamReader(fileSystem.open(dateFilePath)));
        int flag=0;
        String line;
        line=br.readLine();
        while (line != null){
        ds5.write().format("csv").option("compression","none").option("header","false").mode("append").save(Directory+"outputFiles");       


Average.mergeFiles(Directory+"outputFiles",Directory+outputFileName);
}


public static void mergeFiles(String srcPath,String destPath) throws IOException
{
    FileSystem fileSystem=null;

    try {
        Path srcFiles=new Path(srcPath);
        Path srcFile=new Path(destPath);
        Path dest=new Path("DirectorySummaries.csv");
        configuration.setBoolean("fs.hdfs.impl.disable.cache", true);
        fileSystem=FileSystem.get(configuration);
        FileUtil.copyMerge(fileSystem,srcFiles,fileSystem,srcFile,true,configuration,"");
        FSDataOutputStream output=null;
        FSDataInputStream input=null;
        if(!outputFileExits)
        {
            System.out.println("Creating File");
            output=fileSystem.create(dest,false);
            fileSystem.close();

        }
            fileSystem=FileSystem.get(configuration);
            output=fileSystem.append(dest);
            input=fileSystem.open(srcFile);
            IOUtils.copyBytes(input, output,configuration);

            fileSystem.delete(srcFile,false);
    }
    catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    finally {

        fileSystem.close();
    }
}

由于save方法的输出是各种csv文件,因此请使用mergefiles函数将其合并。 有人可以帮忙如何依次迭代输出并将其保存在csv文件中吗?

0 个答案:

没有答案