Как читать большие apache avro файлы

Я новичок в apache avro. У меня была задача прочитать данные из базы данных Oracle и сгенерировать avro из этих данных. Затем во втором задании прочитайте данные из файла avro и вставьте в базу данных MySQL.

Я успешно смог выполнить обе задачи для данных до 1 000 000 строк (3 столбца).
Но когда я увеличил строки до 1 миллиона и 6 столбцов (небольшие данные во всех столбцах), я все же смог сгенерировать avro-файл размером 33 МБ. Но во второй задаче PHP avro библиотека выдает ошибку для Allowed memory size of -- bytes exhausted несмотря на предоставление 1 ГБ памяти.

$data_reader = \AvroDataIO::open_file($file_name);
// Read each datum
$i=0;

foreach ($data_reader->data() as $datum) {

После отладки я обнаружил, что оператор foreach не может выполнить и выдал ошибку. Я подозреваю, если он пытается загрузить все несжатые данные в памяти, что приводит к ошибке.

Если они лучше подходят для чтения больших avro-файлов, или мне нужно генерировать меньшие avro-файлы, или я должен пойти на более высокие ограничения памяти.

ОБНОВЛЕНИЕ: я извлекаю код библиотеки PHP для данных метода, где я нашел проблемный код.

$data []= $this->datum_reader->read($this->decoder);

Это будет хранить все данные в памяти. Альтернативное обновление этой библиотеки на https://github.com/researchgate/avro-php использует PHP 5.5 yield, который, я думаю, должен решить эту проблему. Но в настоящее время я использую PHP 5.4, которые не имеют доходности.

2

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector