Фильтрация набора данных PyArrow не работает с файлами секционированного паркетаPython

Программы на Python
Ответить
Anonymous
 Фильтрация набора данных PyArrow не работает с файлами секционированного паркета

Сообщение Anonymous »

Я сохраняю фрейм данных pandas следующим образом:

Код: Выделить всё

import pyarrow as pa
import pyarrow.parquet as pq
table = pa.Table.from_pandas(my_df)
pq.write_to_dataset(table, root_path="data/bfl", partition_cols=['pnr_group'])
Я могу найти его в такой разделенной структуре каталогов:

Код: Выделить всё

data/bfl/pnr_group=0/319a1fb5557a342c1b55356ce5123123-0.parquet
Когда я читаю отдельный файл паркета напрямую с помощью pq.read_table(), я вижу данные. Однако при попытке прочитать его с помощью API набора данных PyArrow с фильтрацией я получаю пустые результаты:

Код: Выделить всё

import pyarrow.dataset as ds
import pyarrow as pa

# This works - has data
import pyarrow.parquet as pq
file_path = 'data/bfl/pnr_group=0/319a1fb5557a342c1b55356ce5123123-0.parquet'
table = pq.read_table(file_path)
print(len(table))  # Shows rows

# This finds the correct files but returns empty data
dataset = ds.dataset(
'data/bfl',
format='parquet',
partitioning=ds.DirectoryPartitioning.discover(['pnr_group'])
)

filter_expr = ds.field('pnr_group') == '0'
filtered_dataset = dataset.filter(filter_expr)
df = filtered_dataset.to_table().to_pandas()  # Returns empty dataframe
Схема набора данных показывает «pnr_group» как строковый тип, а dataset.files правильно перечисляет все файлы паркета. Однако после фильтрации и преобразования в pandas результирующий фрейм данных оказывается пустым.
Как правильно читать и фильтровать файлы секционированного паркета с помощью API набора данных PyArrow?

Подробнее здесь: https://stackoverflow.com/questions/791 ... quet-files
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»