美文网首页程序员
SparkStreaming将结果输出到单个文件以及小文件的合并

SparkStreaming将结果输出到单个文件以及小文件的合并

作者: 飞叔Brother | 来源:发表于2018-09-12 16:41 被阅读1239次

    原创文章,转载请表明出处

    原始的结果

    今天终于完成了SparkStreaming的阶段性工作,要将结果数据放入到hdfs上保存,使用的是RDD自己原有的函数saveAsTextFiles(“Path”)

    使用函数

    结果如下

    结果

    可以看出,有瑕疵。我是想将我的数据保存在一个文件中,所以有瑕疵。文件太多,文件夹太多。这样的结果对于后面对数据的再次使用,坏处我就不必多说了吧。

    可以看出,多文件夹的原因是因为我是使用的SparkStreaming,所以是每个时间段(Duration)执行一次写入的操作,所以会出现多文件夹,并且名字以时间命名。再看文件夹下的多个文件,这是由我的RDD的分区决定的,而RDD的分区是由我指定数量的线程来决定的,因为我是在本地跑的val sparkConf =new SparkConf().setMaster(Constant.SPARK_MASTER_LOCAL),我这里指定的是4,所以是4个文件。对RDD感兴趣的可以去看一下RDD的分区,讲的很好理解,这里就不再赘述。对spark中RDD通俗易懂的介绍

    解决方法

    思路描述:首先解决多文件的问题,因为文件数量是由分区决定的,那我们就将他重分区,分区数量为1,然后再向hdfs中写入临时目录,写入后我们再将这个文件追加到最终的文件中,然后再把这个临时文件删除。闲话少说,上干货。

    解决方法

    copyMerge(src.getFileSystem(conf), src, dst)方法如下。

    copyMerge(src.getFileSystem(conf), src, dst)

    OK!问题解决。这个文章写到一半搁置了半个月,今天匆匆结束,先这样吧。。。。。。


    以上所述如有不妥,恳请大家指正。

    (如果对您有所帮助话,那就点个赞点个关注吧,嘻嘻~~)

    安利一个特别热心的编程乐园群:624108656

    超级热心的群

    相关文章

      网友评论

        本文标题:SparkStreaming将结果输出到单个文件以及小文件的合并

        本文链接:https://www.haomeiwen.com/subject/vgzdeftx.html