5

私のスクリプトは python で、cassandra は data stax community edition です。

TypeError: A str or unicode value was expected, but int was received instead (3902503)

これは、cassandra 列ファミリーに挿入しようとしているときに発生するエラーです。

コードは次のようになります。

for x in feed:
    cf.insert(uuid.uuid4(), x)

x は、"{key:value}" の形式の単純な配列です。

エラーログは次のことを示唆しています:

    Traceback (most recent call last):
      File "C:\Users\me\Desktop\pro1\src\pro1.py", line 73, in <module>
        str("swf"): str("aws")
      File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 969, in insert
        mut_list = self._make_mutation_list(columns, timestamp, ttl)
      File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 504, in _make_mutation_list
        columns.iteritems())
      File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 503, in <lambda>
        return map(lambda (c, v): Mutation(self._make_cosc(_pack_name(c), _pack_value(v, c), timestamp, ttl)),
      File "c:\Python27\lib\site-packages\pycassa\columnfamily.py", line 462, in _pack_value
        return packer(value)
      File "c:\Python27\lib\site-packages\pycassa\marshal.py", line 231, in pack_bytes
        % (v.__class__.__name__, str(v)))
    TypeError: A str or unicode value was expected, but int was received instead (3902503)        

私がここで見逃している非常に小さなものがあるようです...それが私が専門家に尋ねるためにここに来た理由です!

4

1 に答える 1

4

値が列ファミリーのタイプと一致していることを確認してください。列ファミリが BytesType であるか、それに関連付けられた型がないように見えるため、pycassa は文字列値のみを受け入れます。strネストされた dict 内包表記を使用して、すべての値をリスト内包表記にマップできます(後者には python 2.7 以降が必要です)。

cf.insert(uuid.uuid4(), [{k: str(v) for k, v in d.iteritems()} for d in x])
于 2012-09-16T10:32:37.927 に答える