Сообщение Re[6]: Как бы вы делали эту задачу (переходим к конкретике). от 04.09.2022 17:47
Изменено 04.09.2022 17:48 Gt_
Re[6]: Как бы вы делали эту задачу (переходим к конкретике).
Gt_>>да, сложно. свой компаратор можно подсунуть в sort() партиции, но сортировать внутри партиции нет смысла, т.к. весь файл в одну партицию по памяти не влезет.
S>repartition(1) — это на сколько частей разбить файл?
S>Оно точно не в памяти файл целиком хранит?
процесс жрет 5-6 гигов, пока не понял почему, я вроде driver двумя гигами ограничивал. repartition(1) завязан на write(), думаю он получает стрим и на ходу записывает в файл. можно убрать repartition(1), но тогда придется самому склеивать 200 файлов от партиций что оставит sort().
я думаю оно работает так — файл разбивается на 200 частей — маперы читают, отправляют на 200 редюсоров, те устраивают сортировку внутри партиции — во на выходе и 200 RDD с отсортированным датасетом. на сколько помню RDD может сбрасываться на диск, если памяти не хватает.
S>repartition(1) — это на сколько частей разбить файл?
S>Оно точно не в памяти файл целиком хранит?
процесс жрет 5-6 гигов, пока не понял почему, я вроде driver двумя гигами ограничивал. repartition(1) завязан на write(), думаю он получает стрим и на ходу записывает в файл. можно убрать repartition(1), но тогда придется самому склеивать 200 файлов от партиций что оставит sort().
я думаю оно работает так — файл разбивается на 200 частей — маперы читают, отправляют на 200 редюсоров, те устраивают сортировку внутри партиции — во на выходе и 200 RDD с отсортированным датасетом. на сколько помню RDD может сбрасываться на диск, если памяти не хватает.
Re[6]: Как бы вы делали эту задачу (переходим к конкретике).
Gt_>>да, сложно. свой компаратор можно подсунуть в sort() партиции, но сортировать внутри партиции нет смысла, т.к. весь файл в одну партицию по памяти не влезет.
S>repartition(1) — это на сколько частей разбить файл?
S>Оно точно не в памяти файл целиком хранит?
процесс жрет 5-6 гигов, пока не понял почему, я вроде driver двумя гигами ограничивал. repartition(1) завязан на write(), думаю он получает стрим и на ходу записывает в файл. можно убрать repartition(1), но тогда придется самому склеивать 200 файлов от партиций что оставит orderBy().
я думаю оно работает так — файл разбивается на 200 частей — маперы читают, отправляют на 200 редюсоров, те устраивают сортировку внутри партиции — во на выходе и 200 RDD с отсортированным датасетом. на сколько помню RDD может сбрасываться на диск, если памяти не хватает.
S>repartition(1) — это на сколько частей разбить файл?
S>Оно точно не в памяти файл целиком хранит?
процесс жрет 5-6 гигов, пока не понял почему, я вроде driver двумя гигами ограничивал. repartition(1) завязан на write(), думаю он получает стрим и на ходу записывает в файл. можно убрать repartition(1), но тогда придется самому склеивать 200 файлов от партиций что оставит orderBy().
я думаю оно работает так — файл разбивается на 200 частей — маперы читают, отправляют на 200 редюсоров, те устраивают сортировку внутри партиции — во на выходе и 200 RDD с отсортированным датасетом. на сколько помню RDD может сбрасываться на диск, если памяти не хватает.