Apache Arrow的零拷贝是指什么

背景

最近在看一些native相关的东西(主要是Spark Datafusion Comet Jvm与Rust JNI的Shuffle数据交互),遇到了Arrow零拷贝相关的问题,再次记录一下,Arrow在Spark中应用也是存在的,见Spark中python和jvm的通信杂谈--ArrowConverter

Apache Arrow的零拷贝技术是指通过传递在同一个指向列式内存缓冲区的指针,在不同的系统之间(比如Python,R,Spark,数据库)之间共享数据,从而避免了

代价高昂的数据复制,序列化和反序列化,以获取性能提升,尤其是对于做数据 pipelie以及数据分析的场景,得益于Arrow标准的内存格式以及C Data接口,

通过把数据保存在连续的共享的内存中,显著的减少了内存压力。

工作原理

  • 共享内存:Arrow定义了标准的列式布局,允许不同的Runtime(如 Python, Java,C++)无需重塑,就可以解释编译相同的字节码。
  • C Data接口:该接口允许一个进程或者库将指向Arrow数据缓存区的指针传递另一个进程或者库,从而实现直接内存访问
  • 零拷贝:无需拷贝大量的数据,系统只需要共享在RAM中存在的数据,减少了内存和CPU的额外开销

什么情况下利用了零拷贝(何时不能实现)

  • 利用了:使用Arrow原生格式,或者使用MemoryMappedFile进行进程间通信(IPC),或者使用与Arrow集成的引擎(如DuckDB)
  • 未利用:转换为可写的NumPy数组(会导致强制复制),处理复杂的嵌套数据,或者在传输中需要进行压缩转换的数据

主要优势

  • 低延迟高吞吐:数据处理更快,因为不需要不断的复制和序列化。
  • 减少内存使用:更少的临时对象数据的使用,减少了内存压力
  • 更简洁的架构:Arrow可以作为跨工具的通用数据语言
相关推荐
鸿乃江边鸟1 天前
Spark Datafusion Comet 向量化Rust Native--CometShuffleExchangeExec怎么控制读写
大数据·rust·spark·native
伟大的大威2 天前
NVIDIA DGX Spark (ARM64/Blackwell) Kubernetes 集群 + GPU Operator 完整部署指南
大数据·spark·kubernetes
小邓睡不饱耶2 天前
深度实战:Spark GraphX构建用户信任网络,精准锁定高价值目标用户(含完整案例)
大数据·spark·php
B站计算机毕业设计超人2 天前
计算机毕业设计hadoop+spark+hive共享单车预测系统 共享单车数据可视化分析 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hadoop·python·深度学习·spark·毕业设计·课程设计
B站计算机毕业设计超人2 天前
计算机毕业设计Python+Spark+Hadoop+Hive微博舆情分析 微博情感分析可视化 大数据毕业设计(源码+LW文档+PPT+讲解)
大数据·hadoop·爬虫·python·spark·cnn·课程设计
yumgpkpm2 天前
华为昇腾300T A2训练、微调Qwen过程,带保姆式命令,麒麟操作系统+鲲鹏CPU
hive·hadoop·华为·flink·spark·kafka·hbase
TTBIGDATA2 天前
【Hue】Ambari开启 Kerberos 后,Hue 使用 Spark SQL出现凭证不统一问题处理
大数据·sql·spark·ambari·kerberos·hue·bigtop
鸿乃江边鸟3 天前
Spark Datafusion Comet 向量化Rust Native--Native算子(CometNativeExec)怎么串联执行
大数据·rust·spark·native
Light603 天前
数智孪生,金流·物流全透视:构建某银行制造业贷后风控新范式—— 基于领码 SPARK 融合平台的技术解决方案
大数据·spark·数字孪生·实时监控·物联网金融·供应链风控·ai决策
小邓睡不饱耶3 天前
基于Spark GraphX构建用户信任网络:精准定位高价值目标用户
大数据·spark·php