1

使用 pycassa 在 cassandra 中插入数据时出现编码问题。字段名称是“文本”,内容是可以包含非 ascii 字符的推文。我尝试使用 encode('UTF-8') 对文本字段进行编码,它显示,从 'unicode' 转换为 'str' 但仍然失败?确切的错误在这里,

-'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:对于在 Cassandra 中失败的字段,是否未定义默认验证器类型?这会是个问题吗?如果未指定类型,cassandra 会将其存储为什么?

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

追溯:

Traceback(最近一次调用最后一次):文件“/opt/socialflow/prod/api-reporting/api-reporting/CassFH/app/c.py”,第 40 行,在 send Mutator.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 结果 = f(self, *args, **kwargs)
文件“/usr/local/lib /python2.6/dist-packages/pycassa/cassandra/Cas​​sandra.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/Cas​​sandra.py”,第 5200 行,在写 oprot.trans.write(fastbinary.encode_binary(self, (self.class , self.thrift_spec )))UnicodeEncodeError: 'ascii' codec can't encode character u'\xbf' in position 0: ordinal not in range(128 )[2013-05-20 21:31:14,450]根关键:

4

1 回答 1

-2

这个问题已被解决。所以,这就是问题所在。

  • 同一字段的几个列族中存在编码问题,称为推文文本,可以有非 ascii 字符。
  • 我使用 pycassa Mutator 对多个列族的请求进行批处理
  • 因此,我修复了 2 个列族的编码问题,但没有解决其余 3 个 CF 的问题。
  • 所以批量插入失败了,因为它在 Pycassa 批处理中失败了 1。
  • 我推荐 3 次彻底阅读 python pycassa 文档和 cassandra 数据模型。

希望对大家有所帮助。

于 2013-05-22T17:14:05.893 回答