Обработка огромной таблицы базы данных с помощью Spark

У меня есть огромная таблица базы данных, которая содержит миллионы записей. Каждая запись может обрабатываться изолированно и должна быть преобразована, скажем, в строку.

Итак, я начал осматриваться, и мне было интересно, может ли Spark помочь мне в этом сценарии. В частности, я написал что-то очень простое:

session.read.jdbc(...).rdd
    .map(row => ...convert each row in a string)
    .saveAsTextFile(....)

Проблема: отлично работает с маленькими/средними таблицами, но у меня выходит OutOfMemory в случае огромных таблиц.

Даже если я думаю, что понял, как работает разбиение jdbc (и оно работает), кажется, что session.read.jdbc возвращается (т.е. перемещает каждую строку в метод карты) только после загрузки всего набора данных.

Можно ли, используя тот или иной подход, преобразовывать (т. е. обрабатывать) каждую строку по мере ее чтения?

Я уже рассматривал аналогичный вопрос, указанный в комментариях ниже, но там этот пользователь выполняет агрегацию (df.count), а мне просто нужно перебирать записи одну за другой, поэтому мне было интересно, если это "ленивый" возможна итерация.

Спасибо


person Andrea    schedule 21.12.2017    source источник
comment
Я отредактировал свой пост, см. выше. Спасибо, в любом случае   -  person Andrea    schedule 21.12.2017
comment
Что делается после загрузки данных, в данном контексте не важно. Важно то, как вы его загружаете.   -  person Alper t. Turker    schedule 21.12.2017