Я пишу программу на python, которая должна прочитать примерно 300 строк на 30 столбцов (файл csv 51,6 КБ) данных, и я использую dask.Мне нужно, чтобы 600-метровые строки дублировали данные снова и снова.У меня проблемы с запуском программы и постоянно возникают ошибки памяти.Из теории я знаю, что мне нужно записывать результаты на диск по ходу дела, иначе это приведет к переполнению памяти.
Я определяю количество нужных строк (в данном случае 600 000 000), а затем делю наОбщее количество строк в моем CSV и округления, чтобы получить уровень увеличения.В моем csv есть 326 строк, а уровень увеличения составляет 1840491. Поэтому я взял 326 строк и конкатенировал их 1,8 раза, чтобы слегка превысить 600 метров.Допустим, у меня есть строки 1 abc 2 def 3 ghi
Мне нужно объединить это и получить это 1 2 3 (без индекса) до 600 миллионов.Мне также нужно сделать увеличивающийся диапазон чисел для 2 других столбцов, и он не работает в одиночку.Когда я установил индекс, это заняло некоторое время, но я не знаю, как еще это сделать.Вот часть абстрактного кода.
Кроме того, при тестировании небольшой выборки строк (20000), anotherCol и anotherCol2 не работают.Anothercol и anothercol2 должны быть численно длиной данных, а второй - просто числами, увеличенными от 1 до длины df.Я получаю эту ошибку: ValueError: Не все разделы известны, не удается выровнять разделы.Пожалуйста, используйте set_index
для установки индекса.
rowsDesired = 600000000
df = dd.read(csvfile)
dfrows = len(df)
magnifyLevel = int(math.ceil(rowsDesired/dfrows))
newdf = dd.concat([df]*magnifyLevel, axis = 0)
newdf['anotherCol'] = dd.from_array(np.arange(len(newdf)))
newdf['anotherCol2'] = dd.from_array(np.arange(len(newdf),(len(newdf)*2)))
Я ожидаю сжатый файл паркета, который уже есть в коде.Я могу использовать команду dask to_parquet.