Объект {...} не является ни байтовым объектом, ни методом кодирования при сохранении в тексте в Python Dask - PullRequest
0 голосов
/ 13 апреля 2020

У меня есть большой json файл, который я прочитал с помощью Dask в Python. Затем я настраиваю и фильтрую и пытаюсь снова сохранить его в json.

def flatten(record):
    return {
        'id': record['id'],
        'title': record['title'],
        'year': record['year'],
         ...
    }


if __name__ == '__main__':
    dd = db.read_text('data.json',).map(json.loads)
    dd.filter(lambda x: 'title' in x.keys()) \
        .map(flatten) \
        .to_textfiles('*.json', encoding='utf-8')

Сначала я отфильтрую все объекты, у которых нет поля title. Затем с помощью map я удаляю все ненужные поля и создаю несколько новых полей. И, наконец, я вызываю to_textfiles, чтобы снова сохранить его в json.

Однако я получаю ошибку

TypeError: Object {...here goes the first object as I have created it...} is neither a bytes object nor has an encode method

Объект действителен и проверен в онлайн-валидаторе.

1 Ответ

1 голос
/ 13 апреля 2020

to_textfiles ожидает пакет, в котором элементы являются текстом. Так же, как вы сопоставляете с json.loads перед манипуляцией, вам нужно будет сопоставить с json.dumps перед записью:

.map(json.dumps).to_textfiles('*.json', encoding='utf-8')
...