如題:
因路徑下面都是二進制檔案,所以得用sequenceFile()去加載輸入路徑。但是如果路徑下面有空檔案的話 會提示檔案型別不對,驚奇了。
如果是普通檔案,用textFile() ,路徑下有空檔案也是可以跑的
想問下,有沒有可以過濾空檔案的方法
uj5u.com熱心網友回復:
沒人嗎uj5u.com熱心網友回復:
還是木有人。最后想了個不是辦法的辦法!就是將不是空檔案的檔案目錄都放到一個檔案中
用spark 將這個檔案讀到rdd中,再將這個rdd內容(檔案路徑)作為另一個rdd輸入路徑
然后就OK了
ps:
因為路徑下的檔案太多(10萬多個,都是大檔案),每次跑一點點就出錯了!唉,心累!
沒辦法,將目錄檔案再次拆分,十個檔案,每個一萬。
然后,大功告成。但是感覺這樣太不方便了,資料是每天都有,難道每次跑之前都要新建個目錄檔案么?

uj5u.com熱心網友回復:
因為我這邊是讀取二進制檔案,沒辦用textFile
uj5u.com熱心網友回復:
每次執行前,判斷下指定目錄下檔案的大小資訊,做一次篩選,回傳list 路徑,spark 加載這些路徑就可以了 ,就是多定義一個方法uj5u.com熱心網友回復:
用過自定義的pathFilter,
Configuration hadoopConf = sc.hadoopConfiguration();
hadoopConf.set("mapreduce.input.pathFilter.class","com.filter.FileFilter");
但是有兩個問題,一個是做一次篩選 就要花很久,第二個是篩選完了,同樣還是有十萬多個檔案。用spark直接加載的話,會報錯。
java.nio.channels.ClosedChannelException

uj5u.com熱心網友回復:
這就看當時這部分資料落地的時候策略是什么了,要么就是在落地的時候判斷檔案大小,做過濾操作,要么就是落地之后根據一些簡單規則,對資料按照檔案夾分類處理,最后,將各個檔案的資料進行合并減少檔案的數量,等等.對資料進行一些初始化操作,讓其變成有效,便于讀取的資料.轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/35732.html
標籤:Spark
上一篇:如何用手機管控云服務器
下一篇:Ubuntu虛擬機EOS安裝教程
