我有几个.parquet文件,每个文件的形状为(1126399, 503)
,大小为13MB。据我所知和我所读的内容,应该可以在本地计算机上很好地处理它。我试图将它们放入熊猫数据框中以进行一些分析,但这样做很麻烦。将它们保存到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个核心和32GB内存的系统上运行。我以为我会更高效,并尝试遍历并删除不再需要的文件:
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
不幸的是,这些都不起作用。任何帮助都将不胜感激。
答案 0 :(得分:2)
我打开https://issues.apache.org/jira/browse/ARROW-3424的内容是至少要在pyarrow中创建一个函数,该函数将尽可能高效地加载文件路径的集合。您可以分别用pyarrow.parquet.read_table
加载它们,用pyarrow.Table
连接pyarrow.concat_tables
对象,然后调用Table.to_pandas
转换为pandas.DataFrame
。这样,与熊猫连接起来将更加高效