Вот этапы моей работы:
- Фаза 1. Выполните некоторые вычисления и сохраните временные данные в файле. В потоке будет сохранено и прочитано несколько временных фреймов данных.
- Фаза 2. Прочитайте временные данные, выполните другие вычисления и сохраните их в окончательный файл данных.
ПРИМЕЧАНИЕ. Я сохраняю несколько временных файлов, так как не могу хранить их в памяти, так как данные огромны (84 миллиона строк, 2 миллиона различных значений первичного ключа).
Я использую coleasce(n) или repartition(n) , где n — большое число, например: 200. Теперь это приводит к созданию 200 файлов на выходе для каждого из временных данных, которые я сохраняю. Я знаю, что coleasce/repartition — это дорогостоящая работа для производительности записи. Но я получаю лучший параллелизм, когда использую n=200, чем когда n=50. Это все, что касается написания.
Теперь эти временные данные будут считываться следующими процессами. Итак, будет ли лучше n = 200 или n = 50?
Кроме того, я знаю, что номер родительского раздела (n) будет базой для следующей операции записи и так далее.
Qs:
- Когда использовать coleasce (без перемешивания) и когда использовать перераспределение (перетасовку)?
- Значение раздела, которое будет использоваться и почему?
- Какую стратегию я должен использовать для повышения производительности?