happybase1.1.0 报错:ThriftPy does not support generating module with path in protocol 'c'

桃扇骨 2022-04-12 11:30 229阅读 0赞

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行
watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMTUzNjE5_size_16_color_FFFFFF_t_70watermark_type_ZmFuZ3poZW5naGVpdGk_shadow_10_text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzIxMTUzNjE5_size_16_color_FFFFFF_t_70 1

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’, ”),即

  1. url_scheme = urlparse(path).scheme
  2. #if url_scheme == '':
  3. if url_scheme in ('c', ''):
  4. with open(path) as fh:
  5. data = fh.read()
  6. elif url_scheme in ('http', 'https'):
  7. data = urlopen(path).read()
  8. else:
  9. raise ThriftParserError('ThriftPy does not support generating module '
  10. 'with path in protocol \'{}\''.format(
  11. url_scheme))

注:’c’为盘符,就是我把python装在了c盘,只要能让那个判断为真就行。ThriftPy does not support generating module with path in protocol ‘d’ 或‘e’或’f’ 都是同样操作

发表评论

表情:
评论列表 (有 0 条评论,229人围观)

还没有评论,来说两句吧...

相关阅读