2016-01-26 2 views
1

моего кода следующим образом:happybase авария, когда он пытается сканировать очень большую колонку Hbase

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

Колонки сырья: dataInfo может быть столь же большим, как 50MB, когда я побежал выше код 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 

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

ответ

2

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

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

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

+1

Полезно для пакетного удаления в сочетании с пуском/остановкой или префиксом. –

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