将多个Parquet文件加载到数据框中进行分析

6
我有几个.parquet文件,每个文件的形状为(1126399, 503),大小为13MB。据我所知和从我读到的内容来看,这应该可以在本地机器上处理得很好。我试图将它们保存到pandas dataframe中进行一些分析,但是做这件事情时遇到了困难。将它们保存为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

很不幸,这两种方法都没有起作用。非常感谢您提供的任何帮助。

1个回答

5

我在https://issues.apache.org/jira/browse/ARROW-3424上提出了一个问题,希望在pyarrow中至少制作一个能够以最高效的方式加载一系列文件路径的函数。您可以使用pyarrow.parquet.read_table逐个加载它们,使用pyarrow.concat_tablespyarrow.Table对象连接起来,然后调用Table.to_pandas转换为pandas.DataFrame。这比使用pandas连接更高效。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接