hadoop mapreduce 如何處理跨行的文本數據


首先我們需要明確一個問題就是,hdfs中blocksize是物理概念是真的把數據進行了按塊切分,而mapreduce 中的切片概念是邏輯層面的並沒有真正按照切片大小對數據進行切分,只是按照預先規划好的切片數據根據偏移量讀取數據,實現邏輯層面的分片。
以上我們了解了mapreduce的分片方式后,默認的textinputformat是按照文件長度讀取數據(按照分片),非常有可能一行數據被放到了兩個切片中,這樣一行被切分后很有可能數據分割錯了,比如單詞從中間切分開了等其他情況。
但是mapreduce考慮到了這個問題並巧妙的避開了這個問題:
如果map按照split讀取數據時發現最后一行數據沒有遇到\n換行符,則會去下一個split中讀取數據直到遇到\n為止,第二個map讀取數據時會查看上個map的split數據的最后一行是不是\n,若果不是說明本split的第一行數據已經被讀取,自己從第二行開始讀取;


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM