讀取器
讀取器從存儲(chǔ)中的數(shù)據(jù)集迭代記錄捣郊,并將數(shù)據(jù)加載到數(shù)據(jù)向量中。除了數(shù)據(jù)集中的單個(gè)條目之外,閱讀器的用處包括:如果想要在語(yǔ)料庫(kù)上訓(xùn)練文本生成器寻定,或是以編程方式將兩個(gè)條目組合在一起形成新的記錄的時(shí)候該怎么辦?讀取器實(shí)現(xiàn)對(duì)于復(fù)雜的文件類型或分布式存儲(chǔ)機(jī)制是有用的精耐。
讀取器返回記錄記錄中每一列的Writable類狼速。這些類用于將每個(gè)記錄轉(zhuǎn)換為張量/NDArray 格式。
使用
每個(gè)讀取器實(shí)現(xiàn)都擴(kuò)展了BaseRecordReader并提供了一個(gè)簡(jiǎn)單的API用于選取數(shù)據(jù)集中的下一條記錄卦停,行為類似于迭代器向胡。
包括以下有用的方法:
-
next
: 返回一個(gè)批量的Writable
恼蓬。 -
nextRecord
: 返回單條記錄,RecordMetaData
是可選的僵芹。 -
reset
: 重置基礎(chǔ)迭代器处硬。 -
hasNext
: 迭代器方法以確定是否有其他記錄可用 。
監(jiān)聽(tīng)器
你可以將自定義的RecordListener掛鉤到記錄讀取器進(jìn)行調(diào)試或可視化目的拇派。在初始化類之后荷辕,立即將你的自定義偵聽(tīng)器傳遞給addListener基類方法。
讀取器的類型
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException
記錄讀取器用于每個(gè)管道件豌。獨(dú)立的記錄是由兩個(gè)集合連接而成的疮方。
ConcatenatingRecordReader 連接記錄讀取器
把多個(gè)讀取器合并為一個(gè)讀取器。記錄按順序讀取-因此如果第一個(gè)取讀器有100條記錄苟径,并且第二個(gè)讀取器有200條記錄案站,那么連接記錄讀取器將有300條記錄。
FileRecordReader 文件記錄讀取器
文件讀取/寫(xiě)入
getCurrentLabel
public int getCurrentLabel()
返回當(dāng)前標(biāo)簽棘街。標(biāo)簽列表中當(dāng)前文件的父目錄的索引蟆盐。
- 返回當(dāng)前文件父目錄的索引
LineRecordReader 行記錄讀取器
一行一行讀取文件
CollectionRecordReader 集合記錄讀取器
集合記錄讀取器,主要用于測(cè)試遭殉。
CollectionSequenceRecordReader 集合序列讀取器
用于序列的集合記錄讀取器石挂,主要用于測(cè)試。
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException
- 參數(shù)records是序列集合险污。例如List<List<List>> 這里內(nèi)部?jī)蓚€(gè)列表都是序列痹愚,并且外部的列表/集合是一個(gè)序列。
ListStringRecordReader 集合字符記錄讀取器
迭代一個(gè)字符列表返回一條記錄
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException
在初始化的時(shí)候調(diào)用一次蛔糯。
- 參數(shù) split是定義要讀取的記錄范圍的拆分
- 拋出 IOException
- 拋出 InterruptedException
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException
在初始化的時(shí)候調(diào)用一次
- 參數(shù) conf是一個(gè)用于初始化的配置
- 參數(shù) split是定義要讀取的記錄范圍的拆分
- 拋出 IOException
- 拋出 InterruptedException
hasNext
public boolean hasNext()
判斷是否有下一條記錄
- 返回布爾值
reset
public void reset()
重置
- return
nextRecord
public Record nextRecord()
從給定的DataInputStream加載記錄拯腮,與{-link#next()}不同,RecordReader的內(nèi)部狀態(tài)沒(méi)有修改蚁飒。此方法的實(shí)現(xiàn)不應(yīng)關(guān)閉DataInputStream动壤。
- 參數(shù) uri
- 參數(shù) dataInputStream
- 拋出 IOException ,如果從輸入流中讀取的時(shí)候出錯(cuò)淮逻。
close
public void close() throws IOException
關(guān)閉此流并釋放與之相關(guān)聯(lián)的任何系統(tǒng)資源琼懊。如果流已經(jīng)關(guān)閉,那么調(diào)用此方法沒(méi)有效果爬早。如{-Link AutoCutabySyCuffe()}所指出的哼丈,關(guān)閉可能失敗的情況需要仔細(xì)注意。強(qiáng)烈建議在拋出{-code IOException}之前筛严,放棄底層資源醉旦,并在內(nèi)部將{-code Closeable}標(biāo)記為關(guān)閉。
- 拋出 IOException, 如果 I/O 錯(cuò)誤發(fā)生髓抑。
setConf
public void setConf(Configuration conf)
設(shè)置此對(duì)象要使用的配置咙崎。
- 參數(shù) conf
getConf
public Configuration getConf()
返回此對(duì)象所使用的配置优幸。
CSVRecordReader CSV記錄讀取器
簡(jiǎn)單的CSV讀取器吨拍。
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException
跳過(guò)前n行
- 參數(shù) skipNumLines 需要跳過(guò)的行數(shù)
CSVRegexRecordReader CSV正則記錄讀取器
一個(gè)CSV正則記錄讀取器,它可以使用正則將每個(gè)列拆分為其他列网杆。
CSVSequenceRecordReader CSV序列記錄讀取器
CSV序列記錄讀取器此讀取器旨在讀取CSV格式的數(shù)據(jù)序列羹饰,其中每個(gè)序列在其自己的文件中定義(并且有多個(gè)文件),文件中的每一行表示一個(gè)時(shí)間步驟碳却。
CSVVariableSlidingWindowRecordReader CSV可變滑動(dòng)窗口記錄讀取器
在整個(gè)CSV上可變大小的滑動(dòng)窗口队秩。在實(shí)踐中,滑動(dòng)窗口大小開(kāi)始于1昼浦,然后線性增加到最大線性序列馍资,然后線性下降回到1。
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException
帶有每個(gè)序列默認(rèn)行數(shù)為10的無(wú)參構(gòu)造器
LibSvmRecordReader LibSvm記錄讀取器
libsvm格式的記錄讀取器关噪,它與SVMLight格式密切相關(guān)鸟蟹。與SCIKIT學(xué)習(xí)類似,我們?yōu)閮煞N格式使用同一個(gè)讀取器使兔,因此該類是SvMLeadReadReader的子類建钥。
關(guān)于格式的進(jìn)一步細(xì)節(jié)可以在如下網(wǎng)站中找到
- http://svmlight.joachims.org/
- http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multilabel.html
- http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_svmlight_file.html
MatlabRecordReader Matlab記錄讀取器
Matlab記錄讀取器
SVMLightRecordReader SVMLight記錄讀取器
用于SVMLight格式的記錄讀取器,它通撑傲ぃ可以描述為如下
LABEL INDEX:VALUE INDEX:VALUE …
SVMLight格式非常適合于稀疏數(shù)據(jù)(如詞袋)熊经,因?yàn)樗雎粤怂兄禐榱愕奶卣鳌?/p>
我們支持一個(gè)“擴(kuò)展”版本,允許多個(gè)目標(biāo)(或標(biāo)簽)用逗號(hào)分隔欲险,如下:
LABEL1,LABEL2,… INDEX:VALUE INDEX:VALUE …
這可以用于表示多任務(wù)問(wèn)題或具有稀疏二進(jìn)制標(biāo)簽的多任務(wù)問(wèn)題(通過(guò)“MULTILABEL”配置選項(xiàng)進(jìn)行控制)镐依。
與SCIKIT學(xué)習(xí)一樣,我們支持基于零的和基于一個(gè)的索引天试。
關(guān)于格式的進(jìn)一步細(xì)節(jié)可以在如下網(wǎng)站中找到
- http://svmlight.joachims.org/
- http://www.csie.ntu.edu.tw/~cjlin/libsvmtools/datasets/multilabel.html
- http://scikit-learn.org/stable/modules/generated/sklearn.datasets.load_svmlight_file.html
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException
在嘗試讀取記錄之前調(diào)用槐壳。
- 參數(shù) conf 是數(shù)據(jù)向量配置
- 參數(shù) split是文件分割器
- 拋出 IOException
- 拋出 InterruptedException
setConf
public void setConf(Configuration conf)
Set configuration. 設(shè)置配置
- 參數(shù) conf 是數(shù)據(jù)向量配置
- 拋出 IOException
- 拋出 InterruptedException
hasNext
public boolean hasNext()
幫助檢測(cè)被注釋的行的幫助函數(shù)∏锍樱可以提前讀取并緩存一行宏粤。
- return
nextRecord
public Record nextRecord()
以Writables的列表返回下一個(gè)記錄。
- return
RegexLineRecordReader 正則行記錄讀取器
讀取一整個(gè)文件灼卢,每次一行绍哎,并使用正則分割字段。例如:輸入數(shù)據(jù)的格試為“2016-01-01 23:59:59.001 1 DEBUG First entry message!”
使用正則字符 “(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) (\d+) ([A-Z]+) (.)”將被分割為4個(gè)文本writables: [“2016-01-01 23:59:59.001”, “1”, “DEBUG”, “First entry message!”]
RegexSequenceRecordReader 正則序列記錄讀取器
讀取一整個(gè)序列文件鞋真,每次一行崇堰,并使用正則分割字段。例如:輸入數(shù)據(jù)的格試為“2016-01-01 23:59:59.001 1 DEBUG First entry message!”
使用正則字符 “(\d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}.\d{3}) (\d+) ([A-Z]+) (.)”將被分割為4個(gè)文本writables: [“2016-01-01 23:59:59.001”, “1”, “DEBUG”, “First entry message!”]
不匹配正則的行會(huì)倒致一個(gè)異常(FailOnInvalid),可以被悄悄跳過(guò)(SkipInvalid)海诲,或跳過(guò)無(wú)效但記錄一個(gè)警告(SkipInvalidWithWarning)
TransformProcessRecordReader 轉(zhuǎn)換過(guò)程記錄讀取器
在返回之前應(yīng)用一個(gè)轉(zhuǎn)換過(guò)程繁莹。
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException
在初始化的時(shí)候調(diào)用一次
- 參數(shù) split 分割器,它定義記錄被讀取的范圍
- 拋出 IOException
- 拋出 InterruptedException
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException
在初始化的時(shí)候調(diào)用一次
- 參數(shù) conf初始化需要的一個(gè)配置
- 參數(shù) split 分割器特幔,它定義記錄被讀取的范圍
- 拋出 IOException
- 拋出 InterruptedException
hasNext
public boolean hasNext()
得到下一行
- return
reset
public void reset()
重置
- return
nextRecord
public Record nextRecord()
從給定的DataInputStream加載記錄咨演,與{-link#next()}不同,RecordReader的內(nèi)部狀態(tài)沒(méi)有修改蚯斯。此方法的實(shí)現(xiàn)不應(yīng)關(guān)閉DataInputStream薄风。
- 參數(shù) uri
- 參數(shù) dataInputStream
- 如果從輸入流中讀取的時(shí)候出錯(cuò)則拋出 IOException 。
loadFromMetaData
public Record loadFromMetaData(RecordMetaData recordMetaData) throws IOException
從一個(gè)RecordMetaData實(shí)例中加載單個(gè)記錄拍嵌。注意:對(duì)于不可分割的數(shù)據(jù)(即需要掃描/分割的文本數(shù)據(jù)),通過(guò)使用{- link #loadFromMetaData(List)}一次加載多行是更有效的遭赂。
- 參數(shù) recordMetaData 是 我們想要加載記錄的Metadata
- 為給定的RecordMetaData實(shí)例返回單個(gè)記錄
- 如果在加載過(guò)程中發(fā)生 I/O錯(cuò)誤則拋出 IOException
loadFromMetaData 原文檔中漏了這個(gè)方法說(shuō)明
public List<Record> loadFromMetaData(List<RecordMetaData> recordMetaDatas) throws IOException
從給定RecordMetaData實(shí)例列表中加載多條記錄
- 參數(shù) recordMetaData 是 我們想要加載記錄的Metadata
- 為給定的RecordMetaData實(shí)例返回多條記錄
- 如果在加載過(guò)程中發(fā)生 I/O錯(cuò)誤則拋出 IOException
setListeners
public void setListeners(RecordListener... listeners)
setListeners
public void setListeners(Collection<RecordListener> listeners)
為這個(gè)記錄讀取器設(shè)置記錄監(jiān)聽(tīng)器
- 參數(shù) listeners
close
public void close() throws IOException
關(guān)閉此流并釋放與之相關(guān)聯(lián)的任何系統(tǒng)資源。如果流已經(jīng)關(guān)閉横辆,那么調(diào)用此方法沒(méi)有效果撇他。如{-Link AutoCutabySyCuffe()}所指出的,關(guān)閉可能失敗的情況需要仔細(xì)注意狈蚤。強(qiáng)烈建議在拋出{-code IOException}之前困肩,放棄底層資源,并在內(nèi)部將{-code Closeable}標(biāo)記為關(guān)閉炫惩。
- 拋出 IOException僻弹, 如果 I/O 錯(cuò)誤發(fā)生。
setConf
public void setConf(Configuration conf)
設(shè)置這個(gè)對(duì)象使用的配置
- 參數(shù) conf
getConf
public Configuration getConf()
返回這個(gè)對(duì)象使用的配置
TransformProcessSequenceRecordReader 轉(zhuǎn)換過(guò)程序列記錄讀取器
在返回之前被轉(zhuǎn)換
setConf
public void setConf(Configuration conf)
設(shè)置這個(gè)對(duì)象使用的配置
- 參數(shù) conf
getConf
public Configuration getConf()
返回這個(gè)對(duì)象使用的配置他嚷。
batchesSupported
public boolean batchesSupported()
返回是否支持批量
- 返回一個(gè)布爾值
nextSequence
public SequenceRecord nextSequence()
從給定的DataInputStream加載序列記錄蹋绽,與{-link#next()}不同,RecordReader的內(nèi)部狀態(tài)沒(méi)有修改筋蓖。此方法的實(shí)現(xiàn)不應(yīng)關(guān)閉DataInputStream卸耘。
- 參數(shù) uri
- 參數(shù) dataInputStream
- 如果從輸入流中讀取的時(shí)候出錯(cuò)則拋出 IOException 。
loadSequenceFromMetaData
public SequenceRecord loadSequenceFromMetaData(RecordMetaData recordMetaData) throws IOException
從一個(gè)RecordMetaData實(shí)例中加載單個(gè)記錄粘咖。注意:對(duì)于不可分割的數(shù)據(jù)(即需要掃描/分割的文本數(shù)據(jù)),通過(guò)使用{- link #loadSequenceFromMetaData(List)}一次加載多行是更有效的蚣抗。
- 參數(shù) recordMetaData 是 我們想要加載序列記錄的Metadata
- 為給定的RecordMetaData實(shí)例返回單個(gè)記錄
- 如果在加載過(guò)程中發(fā)生 I/O錯(cuò)誤則拋出 IOException
loadSequenceFromMetaData 原文檔中漏了這個(gè)方法說(shuō)明
public List<SequenceRecord> loadSequenceFromMetaData(List<RecordMetaData> recordMetaDatas) throws IOException
從給定RecordMetaData實(shí)例列表中加載多條記錄
- 參數(shù) recordMetaData 是 我們想要加載記錄的Metadata
- 為給定的RecordMetaData實(shí)例返回多條記錄
- 如果在加載過(guò)程中發(fā)生 I/O錯(cuò)誤則拋出 IOException
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException
initialize
public void initialize(Configuration conf, InputSplit split) throws IOException, InterruptedException
在初始化的時(shí)候調(diào)用一次
- 參數(shù) conf是一個(gè)用于初始化的配置
- 參數(shù) split是定義要讀取的記錄范圍的拆分
- 拋出 IOException
- 拋出 InterruptedException
hasNext
public boolean hasNext()
得到下一條記錄
- return
reset
public void reset()
重置
- return
nextRecord
public Record nextRecord()
從給定的DataInputStream加載記錄,與{-link#next()}不同瓮下,RecordReader的內(nèi)部狀態(tài)沒(méi)有修改翰铡。此方法的實(shí)現(xiàn)不應(yīng)關(guān)閉DataInputStream。
- 參數(shù) uri
- 參數(shù) dataInputStream
- 如果從輸入流中讀取的時(shí)候出錯(cuò)則拋出 IOException 讽坏。
loadFromMetaData
public Record loadFromMetaData(RecordMetaData recordMetaData) throws IOException
從一個(gè)RecordMetaData實(shí)例中加載單個(gè)記錄锭魔。注意:對(duì)于不可分割的數(shù)據(jù)(即需要掃描/分割的文本數(shù)據(jù)),通過(guò)使用{- link #loadFromMetaData(List)}一次加載多行是更有效的。
- 參數(shù) recordMetaData 是 我們想要加載記錄的Metadata
- 為給定的RecordMetaData實(shí)例返回單個(gè)記錄
- 如果在加載過(guò)程中發(fā)生 I/O錯(cuò)誤則拋出 IOException
loadFromMetaData 此方法說(shuō)明在原文檔中沒(méi)有
public List<Record> loadFromMetaData(List<RecordMetaData> recordMetaDatas) throws IOException
從一個(gè)RecordMetaData實(shí)例中加載單個(gè)記錄路呜。注意:對(duì)于不可分割的數(shù)據(jù)(即需要掃描/分割的文本數(shù)據(jù)),通過(guò)使用{- link #loadFromMetaData(List)}一次加載多行是更有效的迷捧。
- 參數(shù) recordMetaData 是 我們想要加載記錄的Metadata
- 為給定的RecordMetaData實(shí)例返回多條記錄
- 如果在加載過(guò)程中發(fā)生 I/O錯(cuò)誤則拋出 IOException
setListeners
public void setListeners(RecordListener... listeners)
setListeners
public void setListeners(Collection<RecordListener> listeners)
為這個(gè)記錄讀取器設(shè)置記錄監(jiān)聽(tīng)器织咧。
- 參數(shù) listeners
close
public void close() throws IOException
關(guān)閉此流并釋放與之相關(guān)聯(lián)的任何系統(tǒng)資源。如果流已經(jīng)關(guān)閉漠秋,那么調(diào)用此方法沒(méi)有效果笙蒙。如{-Link AutoCutabySyCuffe()}所指出的,關(guān)閉可能失敗的情況需要仔細(xì)注意庆锦。強(qiáng)烈建議在拋出{-code IOException}之前捅位,放棄底層資源,并在內(nèi)部將{-code Closeable}標(biāo)記為關(guān)閉肥荔。
- 拋出 IOException绿渣, 如果 I/O 錯(cuò)誤發(fā)生朝群。
NativeAudioRecordReader 本地音頻記錄讀取器
使用FFmpeg的本地音頻文件加載器燕耿。
WavFileRecordReader 聲音文件記錄讀取器
聲音文件加載器
ImageRecordReader 圖片記錄讀取器
圖像記錄讀取器。讀取本地文件系統(tǒng)并解析給定高度和寬度的圖像姜胖。所有圖像被重新縮放并轉(zhuǎn)換為給定的高度誉帅、寬度和通道數(shù)量。
如果指定右莱,還附加標(biāo)簽(基于目錄結(jié)構(gòu)的k個(gè)編碼之一蚜锨,其中根目錄的每個(gè)子目錄是一個(gè)索引標(biāo)簽)
VideoRecordReader 視頻記錄讀取器
視頻只是一個(gè)移動(dòng)的圖片窗口。應(yīng)該這樣處理慢蜓。這會(huì)遍歷根文件夾并返回一幀亚再。
initialize
public void initialize(InputSplit split) throws IOException, InterruptedException
用給定的高和寬加載記錄讀取器
- 參數(shù) height 是加載的高度
- 參數(shù) width 是加載的寬度
TfidfRecordReader 詞頻-逆向文件頻率記錄讀取器
詞頻-逆向文件頻率記錄讀取器(封裝一個(gè)TFIDF矢量化器,用于傳送標(biāo)簽并遵守記錄讀取器接口)
有任何問(wèn)題請(qǐng)聯(lián)系微信
如果您覺(jué)得我的文章給了您幫助晨抡,請(qǐng)為我買(mǎi)一杯飲料吧氛悬!以下是我的支付寶,意思一下我將非常感激耘柱!