2013-11-21 22 views
0

我已經開始使用Async HBase程序庫。我試圖使用TableInputFormat。我不需要我的Map Reduce作業的所有行,所以我通過在TableRecordReader中指定掃描器對象的正則表達式來修改代碼。使用asyc HBase掃描程序進行復雜的正則表達式

String regEx=getRegEx(conf); //my function to calculate the regular expression based on the input given in the conf object 
System.out.println("RegEx = "+regEx); 
scanner.setKeyRegexp(regEx); 

基本上我只是追加所需的行與一個OR(|)正則表達式鍵。這適用於我想要取數百行的情況。在某些情況下,當我想要獲取更多行時,我的正則表達式非常冗長(大約600,000)。但在這種情況下,掃描儀停止工作。

我知道基於正則表達式的行鍵過濾在服務器端完成,複雜的正則表達式可能無法正常工作。

  • 那麼可以做些什麼來使掃描器只提取所需的行?
  • 使用多個掃描儀是否高效,以便每個掃描儀都可以獲得正則表達式的一部分?
  • 或者是使用單個掃描程序來獲取所有行,然後通過它們遍歷所需的行是否有效?

供參考:我的表中的總行數將在數千萬的範圍內。

回答

1

這取決於你的行的長度。你最有可能達到最大字符串數,理論上是2,147,483,647,但實際上它非常侷限於Java獲得的虛擬內存。

僅用於說明目的:2,147,483,647字符需要4GB的專用內存才能容納字符串。您可能想要考慮將字符串分開,每1000行左右放入一個字符串,然後使用所有這些結果來查找您要查找的結果。