2016-09-16 2 views
0

Мне нужна идея, чтобы решить мою проблему в python, чтобы разделить файл.Python Разделить данные на несколько файлов с правилом

I более 1.000.000 строк в файле с двумя столбцами: «accountid» и «property». Один «accountid» может иметь несколько свойств, но каждое свойство является одной строкой. Выглядит примерно так: Example

Мне нужно разбить эти данные на 50 000 строк на файл (что не является проблемой). Тем не менее, я один файл также допускает только 50 «свойств» на «учетную запись». И много имеют более 50 объектов.

У вас есть идея как технически решить эту проблему? Я не требую какого-либо кода;)

Благодаря

Flo

+0

Итак, если элемент с accountid = 1 имеет 130 000 свойств (т. Е. Отображается в 130 000 строк), вы хотите, чтобы это было 3 отдельных файла (первые два файла будут содержать 50 000 строк с accountid = 1, а третий файл будет есть 30 000 оставшихся строк, а также 20 000 строк других предметов)? – shahins

+0

Да, но расщепление само по себе не является проблемой. Это усложняется, потому что каждому файлу разрешено иметь только 50 свойств на один идентификатор. У меня уже есть сложный идентификатор, чтобы решить эту проблему. Как и разбиение сначала на 40.000 партий и разделение, а затем запуск второго скрипта, который перемещает идентификаторы с более чем 50 свойствами в другие файлы. –

ответ

0

Вот одно решение, которое приходит на ум:

Сначала вы должны определить, сколько разделов вы будете нуждаться, основываясь на два параметра X и Y. X определяется счетчиком с максимальным количеством свойств. Предположим, что accountid = 7 имеет максимальное количество свойств, равное 270 свойствам. Это означает, что вам понадобится как минимум 6 разделов, чтобы гарантировать, что решение существует там, где ни один из разделов не будет содержать более 50 из acountid = 7 строк (на основе принципа pigeonhole). Y определяется общим количеством строк, которые у вас есть, и размерами каждого раздела (в вашем примере Y - 1000 000/50 000 = 20). Мы берем максимум X и Y как количество необходимых нам разделов. В этом случае: количество разделов = max (6, 20) = 20.

Теперь вы сортируете всю таблицу с помощью учетной записи. Предположим, мы знаем номер строки для каждой строки. Затем мы определим раздел k как:

P_k = {row | row_number % 20 = k} 

Это должно удовлетворить оба ваших требования.

Обратите внимание, что если max (X, Y) = X, вам придется разрешить некоторые разделы с менее чем 50K строк. В противном случае нет решения этой проблемы.

+0

спасибо человеку! я уже думал об этом подобном подходе, но эта обратная связь от кого-то, у кого больше опыта, велика. я попытаюсь включить это сразу. пожелай мне удачи ;) –

Смежные вопросы