Как проанализировать очень большой файл потока json в действительный JSON - PullRequest
0 голосов
/ 29 января 2020

Я работаю над проектом курса CS, где я должен выполнить анализ настроений данных Twitter на виртуальной машине Ubuntu. Мне удалось создать сканер для получения данных, но у меня есть вывод в формате файла JSON stream, который представляет собой очень большой файл в стиле:

{
  "query": "#India_since_2019",
  "username": "user_1",
  "ID": "123455",
  "tweet": "This is the tweet",
  "datetime": "2019-04-05"
}
{
  "query": "#India_since_2019",
  "username": "user_1",
  "ID": "123455",
  "tweet": "This is the tweet",
  "datetime": "2019-04-05"
}

и т. Д.

Мне необходимо отфильтровать результаты по годам и сохранить результирующий файл json.

Результат, который я ищу, равен

[
{
      "query": "#India_since_2019",
      "username": "user_1",
      "ID": "123455",
      "tweet": "This is the tweet",
      "datetime": "2019-04-05"
    },
    {
      "query": "#India_since_2019",
      "username": "user_1",
      "ID": "123455",
      "tweet": "This is the tweet",
      "datetime": "2019-04-05"
    }
]

Это мешает мне читать файл построчно, так как все данные добавляются, таким образом, не создавая никаких новых строк.

Я пытался использовать jq для разбора данных, но файл был слишком велик и, таким образом, приводил к ошибкам.

У вас, ребята, есть предложения, как мне легко преобразовать это в действительное JSON и писать в другой файл?

Я был бы открыт для решений в любом сценарии, поскольку я гибок с ними, хотя я предпочел бы идею, с которой я могу работать в Python / Shell.

Спасибо!

1 Ответ

1 голос
/ 29 января 2020

Одним из основных преимуществ jq является то, что он ориентирован на поток, поэтому нет необходимости преобразовывать ваш поток JSON сущностей в массив этих сущностей, если только это не является целью. Вся обработка должна выполняться с использованием input и / или inputs, скорее всего с параметром командной строки -n.

Другими словами, рекомендуется выполнять всю обработку в jq, а не в преобразование потока в один, неуправляемо большой объект JSON для некоторого инструмента, который не может работать с потоком.

В качестве альтернативы, если вы используете sh для использования инструмента, требующего ввода JSONL, используйте jq -cn inputs (или jq -c ., как предложено выше).

...