2013-05-21 52 views
1

在使用pycassa在cassandra中插入数据时遇到问题编码问题。字段名称是“文本”,内容是鸣叫,可以有非ASCII字符。我试图使用编码('UTF-8')文本字段进行编码,它显示,从'unicode'转换为'str'但仍然失败?确切的错误是在这里,python pycassa编码问题

-'ascii' codec can't encode character u'\xbf' in position 0: ordinal not in range(128). 
-'ascii' codec can't encode character u'\2026' in position 139: ordinal not in range(128). 

编辑1:场,这是在卡桑德拉失败,没有默认验证类型已被定义?这可能是一个问题吗?如果没有指定type,cassandra会如何存储它?

编辑2:这回答编辑1只是注意到了一些事情,它失败的领域没有默认类型定义和按文档,cassandra将尝试将其存储为十六进制字节数组(ByteType),因为我试图插入UTF-8编码的字符串,这可能是一个问题吗?

回溯:

回溯(最近通话最后一个):文件 “/opt/socialflow/prod/api-reporting/api-reporting/CassFH/app/c.py”,第40行,在发送增变.send(self,* a,** kw)文件“/usr/local/lib/python2.6/dist-packages/pycassa/batch.py​​”,第126行,发送allow_retries = self.allow_retries)

文件“/usr/local/lib/python2.6/dist-packages/pycassa/pool.py”,第124行,在new_f result = f(self,* args,** kwargs)中
文件“/ usr/local_lib/python2.6/dist-packages/pycassa/cassandra/Cassandra.py“,第1005行,在batch_mutate self.send_batch_mutate(mutation_map,consistency_level)
文件“/usr/local/lib/python2.6/dist-packages/pycassa/cassandra/Cas​​sandra.py”,第1013行,在send_batch_mutate args.write(self._oprot)
文件“/ usr/local/lib/python2.6/dist-packages/pycassa/cassandra/Cassandra.py“,第5200行,写入oprot.trans.write(fastbinary.encode_binary(self,(self。 0)Unicode编码错误:'ascii'编解码器无法编码字符u'\ xbf'在位置0:序号不在范围内(128)[2013-05-20 21:31:14,450]根关键:

回答

-2

此问题已得到解决。所以,这是问题所在。在夫妇列族名为鸣叫文本同一领域,它可以有非ASCII字符 存在的

  • 编码问题。
  • 我用pycassa Mutator批量处理多个列族请求
  • 因此,我修复了2列家族的编码问题,但是对于其余3 CF族却没有这样做。
  • 因此,批量插入全部失败,因为Pycassa批次中的批次插入失败。
  • 我推荐3个彻底的python pycassa文档和cassandra数据模型的读取。

希望它能帮助你。