gpt4 book ai didi

python-3.x - 将 avro 文件的目录从 HDFS 读取到 python 中的类似数据框的对象中

转载 作者:可可西里 更新时间:2023-11-01 14:56:03 24 4
gpt4 key购买 nike

尝试将这个问题归结为它的本质:在 python 3 中是否有一种方便的方法来将 avro 文件目录——而不仅仅是单个文件——读取到类似数据框的对象中?

这个问题与使用 Apache Livy 和 Spark 将 avro 文件写入 HDFS 的应用程序有关。使用 pyspark 代码,我能够快速计算或转换 HDFS 上的 avro 文件。但是,我想将 avro 文件的内容作为类似数据框的对象读入内存,作为示例,我可以执行选择、子查询和计数。我知道这可以通过 pyspark 交互式 shell 实现,但这是使用 Django 应用程序运行的,所以这不是一个选项。

我希望能结合python hdfs client libraryfastavro可能是一个选项,但我遇到了递归深度错误,并且感觉仅限于逐个文件。

偶然发现 dask作为看起来令人鼓舞的东西,可能带有 approach found here .

在伪代码中,我喜欢下面这样的代码,显然语法是由以下代码组成的:

df = some_library.load('/path/to/avro/files')
df.count()
OUT: 46323
df.sql.select("record WHERE record.url IS NOT NULL")

我知道 spark 执行这种解析和查询的速度可能无法实现,但我对用于读取 目录 avro 文件的 python 3 方法特别感兴趣。 p>

在我打字时,我意识到内存中可能无法扩展(查看可能的 50k、100k、500k 记录)。所以也许它总是落在发送 python 代码到 spark 上。但是,我想问问也没什么坏处。谢谢。

更新:还有stumbled on this jar file计算 avro 文件,它可以工作,但同样,这不是我要找的东西

更新#2: cyavro正在寻找一个可行的选择;非常快速地将 46k+ 条记录读取到 Pandas 数据框中

最佳答案

您可以使用 jsonhdfscli python 包。

开始:

from hdfs import InsecureClient


HDFS_HOSTNAME = 'master1.hadoop.com'
HDFSCLI_PORT = 50070
HDFSCLI_CONNECTION_STRING = f'http://{HDFS_HOSTNAME}:{HDFSCLI_PORT}'


hdfs_client = InsecureClient(HDFSCLI_CONNECTION_STRING)

avro_file = '/path/to/avro/file.avsc'

with hdfs_client.read(avro_file) as reader:
content = json.load(reader)

然后您需要实现循环(可能使用 hdfs_client.walk)并转换为 pandas

关于python-3.x - 将 avro 文件的目录从 HDFS 读取到 python 中的类似数据框的对象中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46200701/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com