Dask как открыть json со списком диктов

Я пытаюсь открыть кучу файлов JSON, используя read_json Чтобы получить Dataframe, как показано ниже.

ddf.compute()

    id      owner        pet_id
0   1       "Charlie"    "pet_1"
1   2       "Charlie"    "pet_2"
3   4       "Buddy"      "pet_3"

но я получаю следующую ошибку

_meta = pd.DataFrame(
    columns=list(["id", "owner", "pet_id"]])
    ).astype({
        "id":int, 
        "owner":"object", 
        "pet_id": "object"
    })
ddf = dd.read_json(f"mypets/*.json", meta=_meta)
ddf.compute()

*** ValueError: Metadata mismatch found in `from_delayed`.

Мои файлы JSON выглядят так

[
    {
        "id": 1, 
        "owner": "Charlie", 
        "pet_id": "pet_1"
    }, 
    {
        "id": 2, 
        "owner": "Charlie",
        "pet_id": "pet_2"
    }
]

Насколько я понимаю, проблема в том, что я передаю список диктов, поэтому я ищу правильный способ указать его аргумент meta=


ПД:

Я также пытался сделать это следующим образом

{
    "id": [1, 2], 
    "owner": ["Charlie", "Charlie"], 
    "pet_id": ["pet_1", "pet_2"]
}

Но Dask неправильно интерпретирует данные

ddf.compute()
    id          owner                pet_id
0   [1, 2] ["Charlie", "Charlie"]   ["pet_1", "pet_2"]
1   [4]    ["Buddy"]                ["pet_3"]

Какой у тебя _meta?

mdurant 18.12.2020 16:11

Извините, забыл, это пустой фрейм данных pandas. Я добавил его в описание вопроса. спасибо за наводку!

Carlos Rojas 18.12.2020 16:41
Как сделать HTTP-запрос в Javascript?
Как сделать HTTP-запрос в Javascript?
В JavaScript вы можете сделать HTTP-запрос, используя объект XMLHttpRequest или более новый API fetch. Вот пример для обоих методов:
1
2
305
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Вызов, который вы хотите, следующий:

dd.read_json("data.json", meta=meta, 
    blocksize=None, orient = "records", 
    lines=False)

который можно в значительной степени почерпнуть из строки документации.

  • мета выглядит нормально из вашего кода
  • blocksize должен быть None, так как у вас есть целый объект JSON для каждого файла и вы не можете разделить файл
  • ориентация "записи" означает список объектов
  • lines=False означает, что это не файл JSON с разделителями строк, что является более распространенным случаем для Dask (вы не предполагаете, что символ новой строки означает новую запись)

Так почему ошибка? Вероятно, Dask разделил ваш файл на какой-то символ новой строки, и поэтому была проанализирована частичная запись, которая, следовательно, не соответствовала вашей заданной мета.

Оно работает!! Большое спасибо !:D Я не понял опцию orient = "records". у меня теперь понятнее

Carlos Rojas 18.12.2020 17:46

Другие вопросы по теме