私はhbaseからデータを読み込むためのpythonスクリプトを書いています。しかし、ものはthrift
生成されたファイルで間違っているようです。ここに私のコードです:TFramedTransport
は、属性self.__trans
を持って、私はTTransport.py
でコードをチェックhbase thrift2 pythonクライアントAPIが無効
Traceback (most recent call last): File "./load_hbase.py", line 46, in fetch_rows_from_hbase(thrift_protocol, thrift_client) File "./load_hbase.py", line 37, in fetch_rows_from_hbase scan_id = thrift_client.openScanner(hbase_table_name, tscan) File "/home/lishaohua/kpn/load_hbase/thrift2/hbase/THBaseService.py", line 715, in openScanner return self.recv_openScanner() File "/home/lishaohua/kpn/load_hbase/thrift2/hbase/THBaseService.py", line 735, in recv_openScanner result.read(iprot) File "/home/lishaohua/kpn/load_hbase/thrift2/hbase/THBaseService.py", line 3278, in read fastbinary.decode_binary(self, iprot.trans, (self.class, self.thrift_spec)) AttributeError: 'TFramedTransport' object has no attribute 'trans'
:ここ
def create_hbase_connection():
thrift_socket = TSocket.TSocket(thrift_server, thrift_port)
thrift_socket.setTimeout(thrift_timeout)
thrift_transport = TTransport.TFramedTransport(thrift_socket)
thrift_protocol = TBinaryProtocol.TBinaryProtocolAccelerated(thrift_transport)
thrift_client = THBaseService.Client(thrift_protocol)
try:
thrift_transport.open()
except Exception as e:
print "connect to hbase thrift failed. (%s)" % e
sys.exit()
return thrift_protocol, thrift_client
def fetch_rows_from_hbase(thrift_protocol, thrift_client, start_row = None):
tscan = ttypes.TScan()
if start_row != None:
tscan.startRow = start_row
tscan.maxVersions = max_versions
tscan.filterString = "FamilyFilter(!=, 'binary:ge')"
scan_id = thrift_client.openScanner(hbase_table_name, tscan)
result = thrift_client.getScannerRows(scan_id, row_limits + 1)
print result
print "=================================================\n"
thrift_client.closeScanner(scan_id)
thrift_protocol.close()
if __name__ == '__main__':
thrift_protocol, thrift_client = create_hbase_connection()
fetch_rows_from_hbase(thrift_protocol, thrift_client)
そしてエラーです。これを修正するには?私は単にtans
を__trans
に変更することができますが、さらに問題があります。