У меня возник вопрос, связанный с функцией pyspark repartitionBy repartitionBy() которую я изначально разместил в комментарии по этому вопросу. Меня попросили опубликовать его как отдельный вопрос, так вот вот:
Я понимаю, что df.partitionBy(COL) будет записывать все строки с каждым значением COL в свою собственную папку и что каждая папка (предполагая, что строки были ранее распределены по всем разделам каким-либо другим ключом), имеет примерно одинаковое число файлов, которые ранее были во всей таблице. Я нахожу это поведение раздражающим. Если у меня есть большая таблица с 500 разделами, и я использую partitionBy(COL) в некоторых столбцах атрибутов, теперь у меня есть, например, 100 папок, каждая из которых содержит 500 (сейчас очень маленьких) файлов.
Я бы хотел, чтобы поведение partitionBy(COL), но с примерно таким же размером файла и количеством файлов, что и у меня изначально.
В качестве демонстрации предыдущий вопрос разделяет игрушечный пример, где у вас есть таблица с 10 разделами и сделать partitionBy(dayOfWeek) и теперь у вас есть 70 файлов, потому что в каждой папке 10. Я бы хотел ~ 10 файлов, по одному на каждый день и, возможно, 2 или 3 дня, у которых больше данных.
Может ли это быть легко достигнуто? Что-то вроде df.write().repartition(COL).partitionBy(COL) похоже, что он может работать, но я беспокоюсь, что (в случае очень большой таблицы, которая должна быть разбита на несколько папок), чтобы сначала объединить это к небольшому количеству разделов, прежде чем делать partitionBy(COL) кажется плохой идеей.
Любые предложения приветствуются!