Сбой 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 для получения дополнительной информации.