Загрузите несколько файлов паркета в датафрейм для анализа - PullRequest
0 голосов
/ 02 октября 2018

У меня есть несколько файлов .parquet, каждый из которых имеет форму (1126399, 503) и размер 13 МБ.Насколько я знаю и из того, что я прочитал, это может быть легко обработано на локальной машине.Я пытаюсь поместить их в информационный фрейм pandas для проведения некоторого анализа, но у меня возникают проблемы с этим.Сохранение их в файл CSV обходится слишком дорого, так как файлы становятся очень большими, а загрузка их непосредственно в несколько кадров данных и последующая конкатенация приводит к ошибкам памяти.Я никогда не работал с файлами .parquet и не уверен, каков наилучший путь вперед или как использовать файлы для фактического анализа данных.

Сначала я попытался:

import pandas as pd
import pyarrow.parquet as pq

# This is repeated for all files
p0 = pq.read_table('part0.parquet') # each part increases python's memory usage by ~14%
df0 = part0.to_pandas() # each frame increases python's memory usage by additional ~14%

# Concatenate all dataframes together
df = pd.concat([df0, df1, df2, df3, df4, df6, df7], ignore_index=True)

Это заставило меня исчерпать память.Я работаю в системе с 12 ядрами и 32 ГБ памяти.Я подумал, что буду более эффективным, и попытался перебирать и удалять файлы, которые больше не нужны:

import pandas as pd

# Loop through files and load into a dataframe
df = pd.read_parquet('part0.parquet', engine='pyarrow')
files = ['part1.parquet', 'part2.parquet', 'part3.parquet'] # in total there are 6 files

for file in files:
    data = pd.read_parque(file)
    df = df.append(data, ignore_index=True)
    del data

К сожалению, ни один из них не сработал.Любая помощь очень ценится.

1 Ответ

0 голосов
/ 03 октября 2018

Я открыл https://issues.apache.org/jira/browse/ARROW-3424 о создании хотя бы функции в pyarrow, которая будет загружать коллекцию путей к файлам настолько эффективно, насколько это возможно.Вы можете загрузить их индивидуально с помощью pyarrow.parquet.read_table, объединить объекты pyarrow.Table с помощью pyarrow.concat_tables, а затем вызвать Table.to_pandas для преобразования в pandas.DataFrame.Это будет намного эффективнее, чем объединение с пандами

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...