У меня есть большой файл JSON, около 5 миллионов записей и размер файла около 32 ГБ, который мне нужно загрузить в наше хранилище данных Snowflake. Мне нужно разбить этот файл на куски по 200 тыс. Записей (около 1,25 ГБ) на файл. Я хотел бы сделать это либо в Node.JS, либо в Python для развертывания в функции AWS Lambda, к сожалению, я пока не написал ни одного из них. У меня есть С# и большой опыт работы с SQL, и изучение моего узла и python входит в мой список дел, так почему бы не погрузиться прямо в это, верно !?
Мой первый вопрос: "Какой язык лучше подходит для этой функции? Python или Node.JS?"
Я знаю, что не хочу читать весь этот файл JSON в память (или даже выходной файл меньшего размера). Мне нужно иметь возможность "потоком" входить и выходить в новый файл на основе количества записей (200 КБ), правильно закрывать объекты json и продолжать работу в новом файле еще 200 КБ и т.д. Я знаю, что Node может сделать это, но если Python также может сделать это, я чувствую, что было бы легче быстро начать использовать для других вещей ETL, которые я буду делать в ближайшее время.
Мой второй вопрос: "Исходя из вашей рекомендации, приведенной выше, можете ли вы также порекомендовать, какие модули мне требуются/импортировать, чтобы помочь мне начать работу? Прежде всего, это касается того, чтобы не извлекать весь файл json в память? Может быть, некоторые советы, рекомендации или" Как бы вы это сделали? И если вы чувствуете себя действительно щедрым, приведите пример кода, который поможет мне в этом разобраться?
Я не могу включить образец данных JSON, так как он содержит личную информацию. Но я могу предоставить схему JSON.
Отвечая на вопрос, будет ли Python или Node лучше для этой задачи, будет мнение, и нам не позволено высказывать свое мнение о Stack Overflow. Вы должны решить, что у вас больше опыта и с чем вы хотите работать — Python или Node.
Если вы идете с Node, есть некоторые модули, которые могут помочь вам в этой задаче, которые выполняют потоковой анализ JSON. Например. эти модули:
Если вы идете с Python, здесь также есть потоковые JSON-парсеры:
Используйте этот код в командной строке linux
Есть объект json такого вида:
Это возврат $.post из обработчика на PHP.
Как вывести каждую строку отдельно циклом?
И for пробовал, и for..in.
Ключ — число, и из-за этого тоже загвоздка у меня. Как обратиться к price при >?
3 ответа 3
Пример итерации и получение значения по ключу
Для $.post укажите тип данных который принимает callback
Так. Есть у нас объект.
Отвечу на последний вопрос для начала.
Чтобы обратиться к элементу с числовым ключом — достаточно записать это так, как-будто вы обращаетесь к ассоциативному массиву по ключу. Т.е. к элементу с ключом 4 можно обратиться так: test[4]
Теперь к первому вопросу. Так как это не упорядоченный массив, где ключи начинаются с 0, то конечно проще сделать цикл for..in, который пробегает по всем элементам.
Он будет выглядеть просто:
где i — это ключ, и, как следует из первой части моего ответа: test[i] обращение к элементу объекта по ключу.
В итоге в консоли можно будет увидеть
Ну и конечно пробегаясь в цикле, чтоб достать значения можно обращаться уже к ключам через привычную точку: test[i].id или test[i].price и так далее
К примеру есть JSON:
var jsonString = ‘
[
<
"_id":"556598a1e1a9451226304bad",
"date":"2015-05-05T19:00:00.000Z",
"income":5000,
"outcome":0,
"profit":100
>,
<
"_id":"556598b4e1a9451226304bae",
"date":"2015-05-06T19:00:00.000Z",
"income":0,
"outcome":5000,
"profit":300
> ] ;
Мне нужно в таком виде:
Массив a = [Дата, 5000, 0, 100];
Массив b = [Дата, 0, 5000, 300];
Как это сделать? Ничего придумать не могу.