如果您有兴趣为 arrow 贡献代码,本文将从较高层次解释我们的方法。在文章末尾,我们提供了扩展此方法的各种文章链接。
包结构和约定
首先概述包的结构会有所帮助。
C++ 是一种面向对象的语言,因此 Arrow C++ 库的核心逻辑封装在类和方法中。在 arrow R 包中,这些类实现为 R6 类,其中大多数从命名空间导出。
为了匹配 C++ 命名约定,R6 类以“TitleCase”命名,例如 RecordBatch
。这使得可以轻松地在 代码 或 文档 中查找相关的 C++ 实现。为了简化 R 中的操作,通常会删除或扁平化 C++ 库命名空间;也就是说,在 C++ 库中为 arrow::io::FileOutputStream
的地方,在 R 包中仅为 FileOutputStream
。文件读取器是一个例外,其中命名空间对于消除歧义是必要的。因此,arrow::csv::TableReader
变为 CsvTableReader
,而 arrow::json::TableReader
变为 JsonTableReader
。
某些类不应直接实例化;它们可能是基类或其他类型的辅助程序。对于您应该能够创建的类,请使用 $create()
方法实例化对象。例如,rb <- RecordBatch$create(int = 1:10, dbl = as.numeric(1:10))
将创建一个 RecordBatch
。R 用户最常遇到的许多此类工厂方法也具有“snake_case”别名,以便更符合当代 R 用户的习惯。因此,record_batch(int = 1:10, dbl = as.numeric(1:10))
将执行与上述 RecordBatch$create()
相同的操作。
Arrow R 包的典型用户可能永远不会直接处理 R6 对象。我们提供更友好的 R 包装函数作为对 C++ 库的高级接口。R 用户可以调用 read_parquet()
,而无需了解或关心他们正在实例化 ParquetFileReader
对象并在其上调用 $ReadFile()
方法。这些类存在并可供希望对如何使用 C++ 库进行细粒度控制的高级程序员使用。