如何使用pyarrow读取picke文件

问题描述

我有一堆代码用于使用 Pandas 读取多个 pickle 文件

dfs = []
    for filename in glob.glob(os.path.join(path,"../data/simulated-data-raw/","*.pkl")):
        with open(filename,'rb') as f:
            temp = pd.read_pickle(f)
            dfs.append(temp)
    df = pd.DataFrame()
    df = df.append(dfs)

如何使用 pyarrow 读取文件?同时,这种方式不起作用并引发错误

dfs = []
for filename in glob.glob(os.path.join(path,"*.pkl")):
    with open(filename,'rb') as f:
        temp = pa.read_serialized(f)
        dfs.append(temp)
df = pd.DataFrame()
df = df.append(dfs)

解决方法

仅供参考,pyarrow.read_serialized 已弃用,如果您愿意序列化数据,您应该只使用箭头 ipc 或 Python 标准 pickle 模块。

无论如何,我不确定您要实现的目标,使用 Pickle 保存对象将尝试使用保存时相同的类型反序列化它们,因此即使您不使用 Pandas 加载对象,你仍然会得到一个pandas DataFrame(因为那是你腌制的)并且仍然需要安装pandas才能创建一个。

例如,您可以轻松地去掉 pandas.read_pickle 并将其替换为仅 pickle.load,但是您返回的仍然是 pandas.DataFrame

import pandas as pd
original_df = pd.DataFrame({"foo": range(5),"bar": range(5,10)})
pd.to_pickle(original_df,"./dummy.pkl")

import pickle
loaded_back = pickle.load(open("./dummy.pkl","rb"))
print(loaded_back)

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...