ORC 2.x 与 Apache Arrow 深度集成:零拷贝读取的性能革命0. 问题引入:从金融风控特征计算的内存瓶颈说起用户原始问题:“ORC 与 Apache Arrow 的集成在 ORC 2.x 中是如何实现的?有何性能优势?”在构建新一代金融风控引擎时,我们遇到了一个棘手的性能瓶颈。系统需要每秒处理数万笔交易,对每笔交易实时查询并计算数百个用户历史行为特征。这些特征数据以 ORC 格式存储在 S3 上,总量达 PB 级。最初的架构使用 Spark SQL 读取 ORC 文件,再将结果转换为 Pandas DataFrame 供 Python 风控模型使用。然而,我们发现GC (Garbage Collection) 停顿时间异常高,CPU 大量时间花在了对象创建和销毁上,而非真正的业务计算。Profiling 结果显示,罪魁祸首是Java 对象到 Python 对象的反复序列化/反序列化,以及 Spark 内部InternalRow到 PandasDataFrame的转换开销。根本原因在于,传统的 ORC Reader(如VectorizedRowBatch)虽然实现了向量化,但其内存布局仍然是JVM 堆内、面向对象的。当数据需要跨语言(Java - Python)