У меня есть файл паркета, и я хочу прочитать первые строки n из файла во фрейм данных pandas.
Что я пробовал:
df = pd.read_parquet(path= 'filepath', nrows = 10)
Это не сработало и дало мне ошибку:
TypeError: read_table() got an unexpected keyword argument 'nrows'
Я тоже пробовал аргумент skiprows, но он также дал мне ту же ошибку.
В качестве альтернативы я могу прочитать весь файл паркета и отфильтровать первые n строк, но это потребует дополнительных вычислений, которых я хочу избежать.
Есть ли способ этого добиться?






После изучения и связи с командой разработчиков pandas выяснилось, что pandas не поддерживает аргумент nrows или skiprows при чтении файла parquet.
Причина в том, что pandas используют паркетные движки pyarrow или fastparquet для обработки паркетного файла, а pyarrow не поддерживает частичное чтение файла или чтение файла путем пропуска строк (не уверен в fastparquet). Ниже приведена ссылка для обсуждения на pandas github.
Файл Parquet - это хранилище, ориентированное на столбцы, предназначенное для этого ... Так что нормально загружать весь файл, чтобы получить доступ только к одной строке.
Да, паркет столбчатый. Однако столбцы делятся на группы строк. Это означает, что можно читать только часть паркетного файла (т.е. одну группу строк). См. parquet.apache.org/documentation/latest и arrow.apache.org/docs/python/… E. g. Apache Spark может читать и обрабатывать разные группы строк одного и того же файла паркета на разных машинах параллельно.
Принятый ответ устарел. Теперь можно читать только первые несколько строк файла паркета в pandas, хотя это немного беспорядочно и зависит от серверной части.
Чтобы читать с использованием PyArrow в качестве бэкэнда, выполните следующие действия:
from pyarrow.parquet import ParquetFile
import pyarrow as pa
pf = ParquetFile('file_name.pq')
first_ten_rows = next(pf.iter_batches(batch_size = 10))
df = pa.Table.from_batches([first_ten_rows]).to_pandas()
Измените строку batch_size = 10, чтобы она соответствовала тому количеству строк, которое вы хотите прочитать.
И это тоже довольно быстро (для 1 м строк x 2 тыс. Столбцов требуется 10 секунд).
Теперь возможно частичное построчное чтение файлов Parquet (с использованием PyArrow в качестве бэкэнда), как показано здесь: stackoverflow.com/a/69888274/9962007