2013-05-21 79 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數據模型的讀取。

希望它能幫助你。