У меня возник вопрос, связанный с функцией 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)
кажется плохой идеей.
Любые предложения приветствуются!