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



我可以认为ORC文件类似于带有列标题和包含数据的行标签的CSV文件吗?如果是这样,我可以以某种方式将其读取到简单的熊猫数据帧中吗?我对Hadoop或Spark等工具不是很熟悉,但是有必要仅仅为了在Python中查看本地ORC文件的内容而了解它们吗?

文件名为someFile.snappy.orc

我可以在网上看到spark.read.orc('someFile.snappy.orc')工作,但即使在import pyspark之后,它也是抛出错误。

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

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

如果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()

从 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

ORC,如AVRO和PARQUET,是专门为海量存储设计的格式。您可以将它们视为"像csv",它们都是包含数据的文件,具有特定的结构(当然不同于csv或json!

使用pyspark应该很容易阅读 orc 文件,只要你的环境授予 Hive 支持。 回答你的问题,我不确定在没有Hive的本地环境中你是否能够阅读它,我从来没有做过(你可以使用以下代码做一个快速测试(:

加载 ORC 文件,将结果作为数据帧返回。

注意:目前 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()

最简单的方法是使用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)

我不想提交一个火花作业来读取本地 ORC 文件或有熊猫。这对我有用。

import pyarrow.orc as orc
data_reader = orc.ORCFile("/path/to/orc/part_file.zstd.orc")
data = data_reader.read()
source = data.to_pydict()

最新更新