spark中saveAsTextFile如何最终生成一个文件
原文地址:http://www.cnblogs.com/029zz010buct/p/4685173.html
-----------------------------------------------------------------------
一般而言,saveAsTextFile會(huì)按照?qǐng)?zhí)行task的多少生成多少個(gè)文件,比如part-00000一直到part-0000n,n自然就是task的個(gè)數(shù),亦即是最后的stage的分區(qū)數(shù)。那么有沒(méi)有辦法最后只生成一個(gè)文件,而不是成百上千個(gè)文件了?答案自然是有辦法。
在RDD上調(diào)用coalesce(1,true).saveAsTextFile(),意味著做完計(jì)算之后將數(shù)據(jù)匯集到一個(gè)分區(qū),然后再執(zhí)行保存的動(dòng)作,顯然,一個(gè)分區(qū),Spark自然只起一個(gè)task來(lái)執(zhí)行保存的動(dòng)作,也就只有一個(gè)文件產(chǎn)生了。又或者,可以調(diào)用repartition(1),它其實(shí)是coalesce的一個(gè)包裝,默認(rèn)第二個(gè)參數(shù)為true。
事情最終就這么簡(jiǎn)單嗎?顯然不是。你雖然可以這么做,但代價(jià)是巨大的。因?yàn)镾park面對(duì)的是大量的數(shù)據(jù),并且是并行執(zhí)行的,如果強(qiáng)行要求最后只有一個(gè)分區(qū),必然導(dǎo)致大量的磁盤(pán)IO和網(wǎng)絡(luò)IO產(chǎn)生,并且最終執(zhí)行reduce操作的節(jié)點(diǎn)的內(nèi)存也會(huì)承受很大考驗(yàn)。Spark程序會(huì)很慢,甚至死掉。
這往往是初學(xué)Spark的一個(gè)思維陷阱,需要改變?cè)饶欠N單線程單節(jié)點(diǎn)的思維,對(duì)程序的理解要轉(zhuǎn)變多多個(gè)節(jié)點(diǎn)多個(gè)進(jìn)程中去,需要熟悉多節(jié)點(diǎn)集群自然產(chǎn)生多個(gè)文件這種模式。
此外,saveAsTextFile要求保存的目錄之前是沒(méi)有的,否則會(huì)報(bào)錯(cuò)。所以,最好程序中保存前先判斷一下目錄是否存在。
-------------
更多的Java,Android,大數(shù)據(jù),J2EE,Python,數(shù)據(jù)庫(kù),Linux,Java架構(gòu)師,教程,視頻請(qǐng)?jiān)L問(wèn):
http://www.cnblogs.com/zengmiaogen/p/7083694.html
總結(jié)
以上是生活随笔為你收集整理的spark中saveAsTextFile如何最终生成一个文件的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Git 少用 Pull 多用 Fetch
- 下一篇: 使用Notepad++来比较文件