簡體   English   中英

從python(happybase)寫入hbase表

[英]Writing to hbase table from python (happybase)

我正在運行map-reduce作業,現在我想在hbase中輸入值。 我通過stdin從map-reduce作業中傳輸值,並有一個python腳本,在happybase上插入(放置)行。

我遇到了各種各樣的問題,從python執行put。 根據我的理解,最近的問題似乎與庫兼容性問題有關。 錯誤日志顯示iteritems的問題。 happybase手冊指的是排序查詢所需的其他python庫,從python版本2.7開始不需要(我運行的是2.7.6)。

有沒有人遇到類似的問題? 它們可以輕松修復,還是建議使用不同的界面?

更多細節

我在獨立配置中安裝並運行了hadoop(2.6.0)和hbase(0.98.10 - 2/5/2015)。 他們開始了。 我可以通過shell與hbase接口,創建表,輸入值並掃描它們。

我可以通過happybase掃描並打印python中的表格,至少顯示連接是否有效。 但總是失敗。 這個簡短的例子說明了問題:

為了這個例子,我的表叫做test (在hbase shell中創建)。 它有一列f1

hbase(main)> create 't1','f1'
hbase(main)> put 't1','1','f1','hello'

現在python:

>>> import happybase
>>> connection = happybase.Connection('localhost')
>>> table = connection.table('t1')
>>> print(table.row('1')) # {'f1:': 'hello'}
>>> table.put('2',{'f1','hey'}) # fails, see log

更多細節:

節儉正在運行。

# hbase thrift start -threadpool


hduser@box> hbase -version

java版“1.8.0_31”Java(TM)SE運行時環境(版本1.8.0_31-b13)Java HotSpot(TM)64位服務器VM(版本25.31-b07,混合模式)

錯誤日志:

---------------------------------------------------------------------------
AttributeError                            Traceback (most recent call last)
<ipython-input-15-56dab4cd31ef> in <module>()
----> 1 table.put('2',{'f1','hey'})

/usr/local/lib/python2.7/dist-packages/happybase/table.pyc in put(self, row, data, timestamp, wal)
    437         """
    438         with self.batch(timestamp=timestamp, wal=wal) as batch:
--> 439             batch.put(row, data)
    440 
    441     def delete(self, row, columns=None, timestamp=None, wal=True):

/usr/local/lib/python2.7/dist-packages/happybase/batch.pyc in put(self, row, data, wal)
     81                 value=value,
     82                 writeToWAL=wal)
---> 83             for column, value in data.iteritems())
     84 
     85         self._mutation_count += len(data)

AttributeError: 'set' object has no attribute 'iteritems'

Happybase的作者在這里。

代碼中的這一行包含一個錯誤:

>>> table.put('2',{'f1','hey'}) # fails, see log

{'f1', 'hey'}是一個集合文字,而你應該傳遞一個字典。 我猜你的意思是這個?

>>> table.put('2',{'f1': 'hey'})

嘗試:

table.put('2',{'f1:':'hey'}) 

如果你有f1的子列,如col1,col2,你也可以指定特定的子列

table.put('2',{'f1:col1':'hey'}) 

欲了解更多信息,請訪

https://happybase.readthedocs.io/en/happybase-0.4/tutorial.html

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM