原创文章,转载请表明出处
原始的结果
今天终于完成了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
超级热心的群
网友评论