1

У меня возникла проблема, когда данные, загружаемые в db.text, были более 1 мб, поэтому я сжал информацию с помощью zlib. Bulkloader по умолчанию не поддерживал загрузку данных в формате unicode, поэтому я отключил исходный код, чтобы использовать unicodecsv, а не встроенный в csv модуль python. Проблема, с которой я сталкиваюсь, заключается в том, что массовая загрузка Google App Engine не может поддерживать символы Unicode (даже если объект db.Text является unicode).Попытка загрузить сжатые данные (unicode) через bulkuploader

[ERROR ] [Thread-12] DataSourceThread: 
Traceback (most recent call last): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 1611, in run 
    self.PerformWork() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 1730, in PerformWork 
    for item in content_gen.Batches(): 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 542, in Batches 
    self._ReadRows(key_start, key_end) 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/tools/bulkloader.py", line 452, in _ReadRows 
    row = self.reader.next() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/bulkload/csv_connector.py", line 219, in generate_import_record 
    for input_dict in self.dict_generator: 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/unicodecsv/__init__.py", line 188, in next 
    row = csv.DictReader.next(self) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/csv.py", line 108, in next 
    row = self.reader.next() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/site-packages/unicodecsv/__init__.py", line 106, in next 
    row = self.reader.next() 
    File "/Applications/GoogleAppEngineLauncher.app/Contents/Resources/GoogleAppEngine-default.bundle/Contents/Resources/google_appengine/google/appengine/ext/bulkload/csv_connector.py", line 55, in utf8_recoder 
    for line in codecs.getreader(encoding)(stream): 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 612, in next 
    line = self.readline() 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 527, in readline 
    data = self.read(readsize, firstline=True) 
    File "/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/codecs.py", line 474, in read 
    newchars, decodedbytes = self.decode(data, self.errors) 
    UnicodeDecodeError: 'utf8' codec can't decode byte 0x9c in position 29: invalid start byte 

Я знаю, что для моего локального тестирования я мог изменить файлы питона использовать модуль unicodecsv вместо, но это не помогает решить проблему использования Datastore GAE на производстве. Существует ли существующее решение этой проблемы, о котором все знают?

ответ

0

Решил эту неделю, вам просто нужно base64 закодировать результаты, чтобы у вас не возникло проблем с увеличением размера загрузчика на 30-50%, но поскольку zlib уже сжал мои данные до 10% от оригинала, это wasn «Плохо.