如何读取Python Pandas本地存储的ORC文件?

问题描述 投票:0回答:6

我是否可以将 ORC 文件视为类似于 CSV 文件,其中列标题和行标签包含数据?如果是这样,我可以以某种方式将其读入一个简单的 pandas 数据框吗?我对 Hadoop 或 Spark 等工具不太熟悉,但是为了在 Python 中查看本地 ORC 文件的内容,是否有必要了解它们?

文件名是

someFile.snappy.orc

我可以在网上看到

spark.read.orc('someFile.snappy.orc')
有效,但即使在
import pyspark
之后,它也会抛出错误。

python pandas pyspark data-science orc
6个回答
11
投票

我还没有找到任何好的选择,有一些死项目试图包装java阅读器。但是,pyarrow 确实有一个 ORC 阅读器,不需要您使用 pyspark。虽然有一点限制,但确实有效。

import pandas as pd
import pyarrow.orc as orc

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

4
投票

如果

import pyarrow.orc as orc
不起作用(在 Windows 10 中对我不起作用),您可以将它们读取到 Spark 数据框,然后转换为
pandas
的数据框

import findspark
from pyspark.sql import SparkSession

findspark.init()
spark = SparkSession.builder.getOrCreate()
df_spark = spark.read.orc('example.orc')
df_pandas = df_spark.toPandas()

2
投票

从 Pandas 1.0.0 开始,Pandas 内置了一个函数。

https://pandas.pydata.org/docs/reference/api/pandas.read_orc.html

import pandas as pd
import pyarrow.orc 

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

请务必阅读此有关依赖项的警告。此功能可能无法在 Windows 上使用 https://pandas.pydata.org/docs/getting_started/install.html#install-warn-orc

如果您想使用 read_orc(),强烈建议使用conda安装pyarrow


2
投票

最简单的方法是使用pyorc

import pyorc
import pandas as pd

with open(r"my_orc_file.orc", "rb") as orc_file:
    reader = pyorc.Reader(orc_file)
    orc_data = reader.read()
    orc_schema = reader.schema

columns = list(orc_schema.fields)
df = pd.DataFrame(data=orc_data, columns=columns)

1
投票

ORC 与 AVRO 和 PARQUET 一样,都是专门为海量存储而设计的格式。您可以将它们想象为“像 csv”,它们都是包含数据的文件,具有特定的结构(与 csv 不同,当然也不同于 json!)。

一旦您的环境授予 Hive 支持,

使用

pyspark
应该很容易 读取 orc 文件。 回答你的问题,我不确定在没有 Hive 的本地环境中你是否能够阅读它,我从来没有这样做过(你可以使用以下代码进行快速测试):

加载 ORC 文件,以 DataFrame 形式返回结果。

注意:目前 ORC 支持仅与 Hive 支持一起提供。

>>> df = Spark.read.orc('python/test_support/sql/orc_partitioned')

Hive 是一个数据仓库系统,它允许您像传统关系数据库一样通过 Map-Reduce 查询 HDFS(分布式文件系统)上的数据(创建类似 SQL 的查询,不支持 100% 所有标准 SQL 功能! ).

编辑:尝试以下操作来创建新的 Spark 会话。不想粗鲁,但我建议您遵循众多 PySpark 教程之一,以了解这个“世界”的基础知识。一切都会变得更加清晰。

import findspark
findspark.init()
from pyspark.sql import SparkSession
spark = SparkSession.builder.appName('Test').getOrCreate()

0
投票

我不想提交 Spark 作业来读取本地 ORC 文件或拥有 pandas。这对我有用。

import pyarrow.orc as orc
data_reader = orc.ORCFile("/path/to/orc/part_file.zstd.orc")
data = data_reader.read()
source = data.to_pydict()
© www.soinside.com 2019 - 2024. All rights reserved.