将Pandas数据框架从/转换为ORC文件

8

是否可以将Pandas数据框从/转换为ORC文件?我可以将df转换为parquet文件,但是该库似乎没有ORC支持。在Python中是否有可用的解决方案?如果没有,最佳策略是什么?一种选择可能是使用外部工具将parquet文件转换为ORC,但我不知道在哪里找到它。


你正在使用Hive或Spark(或两者都使用)吗?如果你有其中之一,那么做你想做的事情会更容易,而且不会出现错误。特别是,我强烈建议你使用Hive来管理你的ORC文件。你可以使用pyodbc或pyhive包在Python中连接到它。 - Habardeen
@alcor 我刚刚完成了C++和Python的ORC适配器,所以现在如果你使用我的分支https://github.com/mathyingzhou/arrow,就可以编写ORC文件了。 - Ying Zhou
3个回答

7

本答案经过测试使用的是 pyarrow==4.0.1pandas==1.2.5

它首先使用pyarrow.Table.from_pandas创建了一个 pyarrow 表。然后使用pyarrow.orc.ORCFile将 orc 文件写入其中。

读取 orc 文件

import pandas as pd
import pyarrow.orc  # This prevents: AttributeError: module 'pyarrow' has no attribute 'orc'

df = pd.read_orc('/tmp/your_df.orc')

编写ORC文件

import pandas as pd
import pyarrow as pa
import pyarrow.orc as orc

# Here prepare your pandas df.

table = pa.Table.from_pandas(df, preserve_index=False)
orc.write_table(table, '/tmp/your_df.orc')

截至 pandas==1.3.0 版本,还没有 pd.to_orc的写入器。


你有没有想过在使用你所描述的解决方案写ORC文件时添加压缩类型的可能性? - Dominik

4

0

我最近使用了pyarrow,它支持ORC,但是我发现有一些问题,即pyarrow.orc模块没有被加载。

pip install pyarrow

使用方法:

import pandas as pd
import pyarrow.orc as orc

with open(filename) as file:
    data = orc.ORCFile(file)
    df = data.read().to_pandas()

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