科技小数据 Arrow:使用零内存读取DataFrame,Apache
Arrow文件格式的理论和实践介绍
上周 , 我看到了韦斯·麦金尼(WesMcKinney)的一条推文 , 该推文可能是最棒的Pandas软件包的创建者而闻名:
因此 , 当我看到他引用威廉·吉布森(WilliamGibson)的讲话时 , 我认为一定会有令人惊奇的事情发生 。 我没有失望 。
链开始时的推文是有关自然语言处理库HuggingFace的 。 该项目收集可用于模型训练和基准测试的数据集 。 其中一些数据集非常庞大 。 在最初的推文中 , ThomasWolf指出 , 通过一种特殊的文件格式 , 他和QuentinLhoest现在能够在不到一分钟的时间内遍历17GB数据 , 而RAM占用9MB
我想到的第一个问题是:如何?这里发生了什么魔术?
这就是韦斯·麦金尼所谈论的未来 。
由于在线上没有很多实际示例 , 因此我决定写一篇介绍性博客文章 , 其中包含有关我到目前为止所学知识的动手示例 。 我与HuggingFace或PyArrow项目无关 。 在本文的结尾 , 您将找到所有资源的链接 。
任何足够先进的技术都无法与魔术区分开 。 -亚瑟·克拉克(ArthurC.Clarke) , 第三定律

文章图片
>PhotobyJoshuaSortinoonUnsplash
顺利交换数据
第一个线索是托马斯·沃尔夫(ThomasWolf)指的是ApacheArrow 。 ApacheArrow是由WesMcKinney启动的一个项目 , 旨在创建一个用于数据交换的接口:
ApacheArrow是用于内存数据的跨语言开发平台 。 它为平面和分层数据指定了一种与语言无关的标准化列式存储格式 , 该格式组织用于在现代硬件上进行有效的分析操作 。 它还提供计算库和零复制流式消息传递和进程间通信 。 [1]
这是什么意思?
在Arrow之前 , 在任何应用程序或库之间交换数据的标准方法是将数据以一种或另一种方式存储到磁盘 。 因此 , 如果.NETCore库希望将数据传递给Python进行数据分析 , 则很可能有人会写出一个文件(例如csv , json , Parquet等) , 然后使用Python重新读取 。 写入(序列化)和读取(反序列化)这两个步骤都是昂贵且缓慢的-数据集越大 , 完成每个步骤所花费的时间就越长 。

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

文章图片
Parquet是秘密吗?
那让我想知道-我如何使用Arrow?通过查看HuggingFace的源代码 , 我了解到该项目使用PyArrow读取数据 。 在此之前 , 我将PyArrow与Parquet(一种高度压缩的列式存储格式)相关联 。 那么 , Parquet是Arrow如何交换数据的方式吗?(剧透:不是)
传统上 , 数据以逐行的方式存储在磁盘上 。 列式存储的诞生是出于分析大型数据集并对其进行有效聚合的需要 。 数据分析对数据行(例如 , 一项客户交易 , 一个呼叫日志等)的兴趣较小 , 但对其聚合(例如 , 客户花费的总金额 , 按区域划分的总呼叫分钟数 , 等等)的兴趣较小 。

文章图片
>Rowvscolumnorientedstorage(Adaptedfrom[4]withPalmerStationPenguindataset)
这引起了方向的改变:列式存储不是逐行存储 , 而是逐列地排列数据 。
Parquet是一种列存文件格式 , 具有两个主要优点[4]:
·高度可压缩:默认情况下 , .json或.csv文件未压缩 , 而Parquet压缩数据 , 因此节省了大量磁盘空间 。 表通常混合使用具有大量唯一值(高基数;考虑唯一的用户ID)的列和仅具有少数唯一值(低基数;考虑国家/地区)的列 。 基数越低 , 压缩(可能)的效果越好-下一节将对此进行更多说明
推荐阅读
- 科技一哥|荣耀30青春版图集赏析:触觉与视觉的完美享受
- 科技犬君|vs 索尼A9G 谁强?,上半年用户喜爱手机盘点;小米电视大师65英寸OLED
- 精选泛科技|结果如何?,一加8续航遭质疑:上半年最全机型横评出炉
- 科技犬君上半年用户喜爱手机盘点;小米电视大师65英寸OLED vs 索尼A9G 谁强?
- 科技生活快报TB5000mAh大电池还有65W超级快充!这些手机让你摆脱充电焦虑
- 精选泛科技一加8续航遭质疑:上半年最全机型横评出炉,结果如何?
- 阿拉图图科技说三星新机口碑虽好,但中国市场销量翻车,用户几乎跑光!
- 华为Mate30美科技界:华为再强大也只是一家民企,我们究竟在怕什么?
- 行业|高增长+高回撤!请收好这份“补票”名单,11只核心资产股入围,百亿科技股已跌出“深坑”
- 疫情|美国疫情速报:确诊数已逼近284万;特朗普发话:99%新冠病例完全无害;美专家:实际感染数或是现有数据10~24倍
