Сбой happybase при попытке сканирования очень большого столбца Hbase

Мой код следующим образом:

for key,data in table.scan(columns=["raw:dataInfo"]):
   count+=1
   ...

Столбец raw:dataInfo может быть размером до 50 МБ. Когда я запустил приведенный выше код, произошел сбой happybase и возникло следующее исключение:

Traceback (most recent call last):
  File "happybasetestscan.py", line 8, in <module>
    for key,data in table.scan(columns=["raw:sample"],limit=10):
  File "/usr/lib/python2.6/site-packages/happybase/table.py", line 374, in scan
    self.name, scan, {})
.......
thrift.transport.TTransport.TTransportException: TSocket read 0 bytes 

Любые идеи, пожалуйста, как посчитать большую колонку. Спасибо!

1 ответ

Решение

Я полагаю, благотворительный сервер не ответил должным образом. HappyBase сообщает (через Thrift библиотеки), что никакие данные не могут быть прочитаны из сокета.

в любом случае, если вы хотите выполнить полное сканирование таблицы для подсчета (что неэффективно, но нормально), используйте фильтр для сканирования:

# Scan, get only keys (data will be empty)
scanner = table.scan(
    row_start=b'aaa',
    row_stop=b'bbb',
    filter=b'KeyOnlyFilter() AND FirstKeyOnlyFilter()',
)

for row_key, data in scanner:
    pass  # do something with row_key

См. https://github.com/wbolster/happybase/issues/12 для получения дополнительной информации.

Другие вопросы по тегам