Я пытаюсь найти эффективный способ чтения частей (как определено с помощью набора фильтров) набора данных в pandas.
Сейчас это делается
Код: Выделить всё
result = ds.dataset(dataset_storage_root, format="parquet", partitioning='hive').scanner(
columns=columns,
filter=filters
).to_table().to_pandas()
И под довольно медленными я подразумеваю ~13 секунд, что нормально, учитывая размер набора данных, но смешно, учитывая фактический объем данных, которые мне нужно получить.
Определение подпапки для данных и чтение вручную только эта часть для сравнения занимает ~9 мс. Обратной стороной является то, что мне нужно вручную добавлять столбцы и значения разделов и обрабатывать немало крайних случаев с помощью фильтрации и схем.
Я предполагаю, что должен быть способ сделать это с помощью API и при этом эффективно.
Что я уже пробовал, к своему разочарованию:
Код: Выделить всё
df_pandas = pd.read_parquet(dataset_storage_root, engine="pyarrow", filters=filters)
Код: Выделить всё
df_pq = pq.read_table(dataset_storage_root, filters=filters)
Это занимает безумное количество времени, несмотря на утверждение, что необходимо читать только подмножество, указанное фильтрами.>
Подробнее здесь: https://stackoverflow.com/questions/791 ... ed-dataset
Мобильная версия