Apache Arrow 1.0.0发布

2020-07-27 23:28:12

Apache Arrow团队很高兴地宣布发布了1.0.0版本。这涵盖了超过3个月的开发工作,包括来自100个不同贡献者的810个已解决的问题。请参阅安装页以了解如何获取适用于您的平台的库。尽管是“1.0.0”版本,但这是Apache Arrow的第18个主要版本,标志着向柱状格式(早在2017年12月就已经非正式地向后兼容)的二进制稳定性的过渡,以及向Arrow软件库的语义版本控制的过渡。下面的版本说明并不详尽,仅介绍了该版本的部分亮点。已经进行了许多其他错误修复和改进:我们向您推荐完整的ChangeLog。1.0.0栏目格式和稳定性保证1.0.0版本表明箭头栏目格式声明为稳定,具有向前和向后兼容性保证。Arrow Columnar格式最近进行了几次更改和添加,导致了1.0.0格式版本:元数据版本被升级到新版本V5,这表明UNION类型的缓冲区布局发生了不兼容的更改。所有其他类型都保持与V4中相同的布局。V5还增加了格式以帮助实现向前兼容性(检测未来库版本发送的不受支持的更改)。库与所有库从0.8.0(2017年12月)开始生成的数据保持向后兼容,并且Java和C++库能够生成与V4兼容的消息(用于向使用0.8.0到0.17.1的应用程序发送数据)。字典索引现在允许为无符号整数,而不仅仅是有符号整数。仍然不鼓励使用UInt64,因为Java支持很差。添加了一个“Feature”枚举来声明在IPC流中使用特定的可选功能,比如缓冲区压缩。此新字段尚未被任何实现使用。使用LZ4或ZStandard的可选缓冲区压缩被添加到IPC格式。DECIMAL类型现在有一个可选的“bitWidth”字段,默认为128。这将允许将来支持其他小数宽度,例如32位和64位。有效性位图缓冲区已从UNION类型中删除。UNION数组中槽的空性由组成UNION的组成数组独占确定。集成测试已经扩展到测试扩展类型和嵌套字典。有关详细信息,请参阅实施列表。社区自上次发布以来,我们增加了两名新的提交者:Liya Fan Ji Liu感谢您的所有贡献!Arrow Flight RPC Notes Flight现在在C++、Java和Python中除了doGet和DoPut之外,还提供了DoExchange,这是一个完全双向的数据端点。所有语言的中间件现在都公开二进制值标头。此外,服务器和客户端可以设置所有语言的Arrow IPC读/写选项,从而更容易与早期版本的Arrow Flight兼容。在C++和Python中,Flight现在公开了来自GRPC的更多选项,包括客户端地址(在服务器上)和设置低级GRPC客户端选项的能力。Flight还支持相互的TLS身份验证和客户端控制线路上数据消息大小的能力。C++Notes对Arrow静态链接的支持已经得到了极大的改进,包括引入了libarrow_bundled_relendencies。该库捆绑了所有外部依赖项,这些外部依赖项是由Arrow的构建系统从源代码构建的,而不是由外部包管理器安装的。这使得创建所有库都是静态链接的无依赖关系的应用程序变得非常容易。箭头格式更改后,UNION数组不能再有顶级位图。进行了许多改进,以减少Arrow库中生成的二进制文件的总体大小。方便的API GetBuildInfo允许查询Arrow库的特征。我们鼓励您对返回的信息提出任何需要的补充建议。我们向utf8proc库添加了一个可选的依赖项,用于几个计算函数(见下文)。稀疏和密集联合现在不再共享相同的具体类,而是具有独立的类(SparseUnionType和DenseUnionType,以及SparseUnionArray、DenseUnionArray、SparseUnionScalar和DenseUnionScalar)。Arrow现在可以使用正确的CMake选项集为iOS构建,尽管我们不正式支持它。有关详细信息,请参阅这篇文章。COMPUTE函数计算内核层进行了广泛的修改。它现在提供了通用的函数查找、调度和执行机制。此外,新的内部搭建使编写新函数内核变得容易得多,具有许多常见的细节,如类型检查和基于类型组合的函数分派,由框架处理,而不是由函数开发人员手动实现。添加了大约30个新的阵列计算函数。例如,符合Unicode的谓词和转换,如小写和大写