爱上海网,海生活网,上海114信息网,上海新闻网——上海门户网上海人才网-上海求职找工作门户
您的位置:主页 > 娱乐 > 文章正文

Apache Arrow:使用零内存读取DataFrame

Arrow文件格式的理论和实践介绍

上周,我看到了韦斯·麦金尼(Wes McKinney)的一条推文,该推文可能是最棒的Pandas软件包的创建者而闻名:

因此,当我看到他引用威廉·吉布森(William Gibson)的讲话时,我认为一定会有令人惊奇的事情发生。 我没有失望。

链开始时的推文是有关自然语言处理库Hugging Face的。 该项目收集可用于模型训练和基准测试的数据集。 其中一些数据集非常庞大。 在最初的推文中,Thomas Wolf指出,通过一种特殊的文件格式,他和Quentin Lhoest现在能够在不到一分钟的时间内遍历17GB数据,而RAM占用9MB

我想到的第一个问题是:如何? 这里发生了什么魔术?

这就是韦斯·麦金尼所谈论的未来。

由于在线上没有很多实际示例,因此我决定写一篇介绍性博客文章,其中包含有关我到目前为止所学知识的动手示例。 我与Hugging Face或PyArrow项目无关。 在本文的结尾,您将找到所有资源的链接。

任何足够先进的技术都无法与魔术区分开。 -亚瑟·克拉克(Arthur C. Clarke),第三定律

Apache Arrow:使用零内存读取DataFrame

> Photo by Joshua Sortino on Unsplash

顺利交换数据

第一个线索是托马斯·沃尔夫(Thomas Wolf)指的是Apache Arrow。 Apache Arrow是由Wes McKinney启动的一个项目,旨在创建一个用于数据交换的接口:

Apache Arrow是用于内存数据的跨语言开发平台。 它为平面和分层数据指定了一种与语言无关的标准化列式存储格式,该格式组织用于在现代硬件上进行有效的分析操作。 它还提供计算库和零复制流式消息传递和进程间通信。 [1]

这是什么意思?

在Arrow之前,在任何应用程序或库之间交换数据的标准方法是将数据以一种或另一种方式存储到磁盘。 因此,如果.NET Core库希望将数据传递给Python进行数据分析,则很可能有人会写出一个文件(例如csv,json,Parquet等),然后使用Python重新读取。 写入(序列化)和读取(反序列化)这两个步骤都是昂贵且缓慢的-数据集越大,完成每个步骤所花费的时间就越长。

Apache Arrow:使用零内存读取DataFrame

如果可以通过握手和零复制直接交换数据该怎么办? 它可能看起来像这样:.NET将开始与Python聊天,指向内存中的一堆数据,然后像:嘿,朋友,这是您的了。 而且Python可以直接跳转到它,而无需将它从一个地方拖到另一个地方。 那不是很棒吗?

这就是Apache Arrow的目的。

Apache Arrow:使用零内存读取DataFrame

Parquet是秘密吗?

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!

特别提醒:爱上海网,海生活网,上海114信息网,上海新闻网——上海门户网上海人才网-上海求职找工作门户部分内容转载自其他媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请与本网联系,我们将在第一时间处理。