1

次のように私のコード:

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

列 raw: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 

大きな列を数える方法を教えてください。ありがとうございます。

4

1 に答える 1

2

リサイクルサーバーが適切に応答しなかったと思います。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#issuecomment-12754400を参照してください。

于 2016-02-02T10:56:27.410 に答える