gpt4 book ai didi

python - 通过 Thrift 在 HBase 中的 mutateRow() 需要未记录的第四个参数

转载 作者:可可西里 更新时间:2023-11-01 15:18:10 26 4
gpt4 key购买 nike

当我尝试通过 Thrift(特别是 Python)对 HBase 进行插入/更新时,mutateRow() 需要第四个参数“属性”。 Thrift 表示此列是字符串-> 字符串映射。所有示例和在线讨论都没有提到这第四个专栏,甚至提供了相同、确切版本的 HBase 的 Thrift 示例也没有。

如果可以,请提供创建表、定义列族、插入行和转储数据的完整示例。

最佳答案

没问题。此外,我不只是转储创建列的值,而是转储修改后的列的最后三个版本,只是因为它很酷。

为了完整起见,我粗略地做了以下事情来让 Thrift 工作:

  • 下载并构建了 Thrift(使用 SVN.. 2012-11-15/1429368)。
  • 从我想要创建 Python 接口(interface)文件的路径运行“thrift -gen py ”。
  • 通过 PIP 安装“thrift”包。

我从生成文件的根目录运行了以下代码。

from thrift.transport import TSocket
from thrift.transport import TTransport
from thrift.protocol import TBinaryProtocol

from hbase import Hbase
from hbase.ttypes import *

from random import randrange
from pprint import pprint

socket = TSocket.TSocket('localhost', 9090)
transport = TTransport.TBufferedTransport(socket)
transport.open()
protocol = TBinaryProtocol.TBinaryProtocol(transport)
client = Hbase.Client(protocol)

table_name = 'test_table'
row_key = 'test_row1'
colfamily1 = 'test_colfamily1'
column1 = 'test_col1'
fullcol1 = ('%s:%s' % (colfamily1, column1))
value = ('%d' % randrange(1000, 9999))

num_versions = 3

try:
desc = ColumnDescriptor(colfamily1)
client.createTable(table_name, [desc])
except AlreadyExists:
pass

client.mutateRow(table_name, row_key, [Mutation(column=fullcol1, value=value)], {})
results = client.getVer(table_name, row_key, fullcol1, num_versions, {})

pprint(results)

输出:

$ python test.py 
[TCell(timestamp=1357463438825L, value='9842')]
$ python test.py
[TCell(timestamp=1357463439700L, value='9166'),
TCell(timestamp=1357463438825L, value='9842')]
$ python test.py
[TCell(timestamp=1357463440359L, value='2978'),
TCell(timestamp=1357463439700L, value='9166'),
TCell(timestamp=1357463438825L, value='9842')]

关于python - 通过 Thrift 在 HBase 中的 mutateRow() 需要未记录的第四个参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14180824/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com