Разделение большого одиночного массива Json на несколько массивов JSON с 10K-записями - PullRequest
1 голос
/ 06 ноября 2019

У меня есть CSV-файл, содержащий около 5 миллионов записей, и я пытаюсь преобразовать данные csv-файла в массив json, используя Json-процессор jq. Однако мне нужно преобразовать CSV в массивы json (в отдельные файлы), каждая из которых содержит 10K записей вместо одного файла массива json с 5 миллионами записей, как показано в следующем примере.

Как мне добиться этого с помощью оболочкисценарий? ИЛИ Как мне преобразовать один массив json в несколько массивов json, каждый из которых содержит 10 тыс. Записей в файле json через shellscipt?

Входной файл CSV:

identifier,type,locale
91617676848,MSISDN,es_ES
91652560975,MSISDN,es_ES
91636563675,MSISDN,es_ES

CSV в преобразование JSON:

jq --slurp --raw-input --raw-output \
  'split("\n") | .[1:] | map(split(",")) |
      map({"identifier": .[0],
             "type": .[1],
             "locale": .[2]})' \
  sample.csv > out_new.json

Вывод одного массива Json:

[
  {
    "identifier": "91617676848",
    "type": "MSISDN",
    "locale": "es_ES"
  },
  {
    "identifier": "91652560975",
    "type": "MSISDN",
    "locale": "es_ES"
  },
  {
    "identifier": "91636563675",
    "type": "MSISDN",
    "locale": "es_ES"
  }
]

Ожидаемый вывод Json.

1.json  (having 10K json array records)
  [
  {
    "identifier": "91617676848",
    "type": "MSISDN",
    "locale": "es_ES"
  },
  .
  .
  .
  .
  {
    "identifier": "91652560975",
    "type": "MSISDN",
    "locale": "es_ES"
  }
  ]


  2.json (having 10K json array records)
  [
  {
    "identifier": "91636563675",
    "type": "MSISDN",
    "locale": "es_ES"
  },
  .
  .
  .
  .

  {
    "identifier": "91636563999",
    "type": "MSISDN",
    "locale": "es_ES"
  }
  ]

1 Ответ

0 голосов
/ 07 ноября 2019

Стоит установить "csvkit", чтобы использовать программу "csvjson" для этой цели. (Используйте Homebrew на OS X.) https://csvkit.readthedocs.io/en/latest/scripts/csvjson.html

$ csvjson -I sample.csv | jq
[
  {
    "identifier": "91617676848",
    "type": "MSISDN",
    "locale": "es_ES"
  },
  {
    "identifier": "91652560975",
    "type": "MSISDN",
    "locale": "es_ES"
  },
  {
    "identifier": "91636563675",
    "type": "MSISDN",
    "locale": "es_ES"
  }
]
...