storm裏面的python腳本需要讀寫hbase,在本地運行測試的時候報錯:thriftpy.parser.exc.ThriftParserError: ThriftPy does not support generating module with path in protocol 'c'
原因:happybase1.1.0在win下不支持絕對路徑
具體原因:happybase要讀取C:\ProgramData\Anaconda3\Lib\site-packages\happybase\Hbase.thrift,但在C:\ProgramData\Anaconda3\Lib\site-packages\thriftpy\parser\parser.py中的496行
path是Hbase.thrift的絕對路徑(我的是“C:\ProgramData\Anaconda3\Lib\site-packages\happybase\Hbase.thrift”),但經過urlparse(path).scheme後,url_scheme變成了“c”,(這也就是報錯信息中最後的“c”)。根據代碼,url_scheme既不爲“”,也不包含
(‘http’,’https’),則只能爲raise報錯。
解決方案:將488行的url_scheme == ”改爲url_scheme in (‘c’, ”),即
url_scheme = urlparse(path).scheme
#if url_scheme == '':
if url_scheme in ('c', ''):
with open(path) as fh:
data = fh.read()
elif url_scheme in ('http', 'https'):
data = urlopen(path).read()
else:
raise ThriftParserError('ThriftPy does not support generating module '
'with path in protocol \'{}\''.format(
url_scheme))
注:’c’爲盤符,就是我把python裝在了c盤,只要能讓那個判斷爲真就行。ThriftPy does not support generating module with path in protocol 'd' 或‘e’或'f' 都是同樣操作