Потоковый паркетный файл python и только даунсэмплинг
У меня есть данные в формате паркета, которые слишком велики, чтобы уместиться в память (6 ГБ). Я ищу способ прочитать и обработать файл, используя Python 3.6. Есть ли способ для потоковой передачи файла, сэмплирования и сохранения в dataframe
? В конечном счете, я хотел бы получить данные в dataframe
формат для работы.
Я ошибаюсь, пытаясь сделать это без использования рамки искры?
Я пытался использовать pyarrow
а также fastparquet
но я получаю ошибки памяти при попытке прочитать весь файл. Любые советы или предложения будут с благодарностью!
2 ответа
Искра, безусловно, является жизнеспособным выбором для этой задачи.
Мы планируем добавить логику потокового чтения в pyarrow
в этом году (2019, см. https://issues.apache.org/jira/browse/ARROW-3771 и связанные с этим вопросы). В то же время, я бы рекомендовал читать по одной группе строк за раз, чтобы уменьшить проблемы использования памяти. Вы можете сделать это с pyarrow.parquet.ParquetFile
И его read_row_group
метод
Это не ответ, я публикую здесь, потому что это единственная соответствующая запись, которую я могу найти в Stackru. Я пытаюсь использовать read_row_group
функция, но python просто выйдет с кодом 139. Нет других сообщений об ошибках, не знаю, как это исправить..
from pyarrow.parquet import ParquetFile
path = "sample.parquet"
f = ParquetFile(source = path)
print(f.num_row_groups) # it will print number of groups
# if I read the entire file:
df = f.read() # this works
# try to read row group
row_df = f.read_row_group(0)
# I get
Process finished with exit code 139 (interrupted by signal 11: SIGSEGV)
Python версия 3.6.3
pyarrow версия 0.11.1