Материализация и экспорт
Если вы используете сложные трансформации (через .map() или .alias(lambda ...)), каждое чтение строки будет запускать выполнение вашего Python-кода. На больших данных это может стать "бутылочным горлышком".
Для решения этой проблемы библиотека предоставляет механизмы материализации — записи текущего состояния датасета в новый физический Parquet файл.
Метод to_parquet
Метод to_parquet просто сохраняет текущее состояние датасета на диск.
Шардирование (Sharding)
Если ваш датасет слишком велик для одного файла, вы можете разбить его на части (шарды):
# Разобьет датасет на файлы по 50,000 строк в директории 'shards/'
dataset.to_parquet("shards/", shard_size=50000)
Метод clone (Рекомендуется)
Метод clone делает то же самое, что и to_parquet, но возвращает новый экземпляр IndexedParquetDataset, который сразу смотрит на только что созданный файл.
Это лучший способ "запечь" фильтры и трансформации и продолжить работу с максимальной скоростью (zero-overhead).
# 1. Применяем медленные трансформации
ds = (IndexedParquetDataset.from_folder("./raw")
.filter(heavy_logic)
.map(complex_transform))
# 2. Клонируем в быстрый файл
fast_ds = ds.clone("baked_data.parquet")
# 3. Теперь fast_ds работает на порядки быстрее
row = fast_ds[0]
Когда стоит делать материализацию?
- Сложные Python-трансформации: Если в цепочке есть
.map()или.alias(callable). - Тяжелая фильтрация: Если вы отфильтровали 90% данных из огромного датасета. Прямой доступ к оставшимся 10% в исходных файлах будет все еще быстрым, но индекс в памяти будет содержать много "дырок", а файловые дескрипторы будут висеть для всех исходных файлов.
- Подготовка для другого инструмента: Если вы хотите использовать очищенные данные в другом приложении (например, загрузить в Apache Spark).
- Финальная версия: Перед запуском длительного обучения модели на кластере.
Параметры записи
Вы можете настроить размер чанка во время записи: