2013-11-21 2 views
0

Я начал использовать библиотеку Async HBase. Я пытаюсь использовать TableInputFormat. Мне не нужны все строки для моей задачи «Уменьшить карту», ​​поэтому я изменил код, указав регулярное выражение для объекта сканера в TableRecordReader.Сложное регулярное выражение с asyc HBase Scanner

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), когда я хочу получить больше строк. Но в этом случае сканер перестает работать.

Я знаю, что фильтрация строк строк на основе регулярного выражения выполняется на стороне сервера, и сложное регулярное выражение может не работать.

  • Итак, что можно сделать, чтобы сканер извлек только нужные строки?
  • Эффективно ли использовать несколько сканеров, чтобы каждому можно было предоставить часть регулярного выражения?
  • Или эффективно использовать один сканер для получения всех строк, а затем итерации по ним для требуемых строк?.

FYI: Общее количество строк в моем столе будет в диапазоне десятков миллионов.

ответ

1

Это зависит от длины ваших строк. Скорее всего, вы попадаете в максимальную строку legnth, которая теоретически равна 2,147,483,647, но на самом деле она очень ограничена виртуальной памятью Java.

Для иллюстрации: 2,147,483,647 символов потребуется 4 ГБ выделенной памяти, чтобы удерживать строку. Возможно, вам захочется подумать о разделении строки вверх, создавая строку из каждых 1000 или около того строк и используя все эти результаты, чтобы найти результат, который вы ищете.

Смежные вопросы