如果您有兴趣为 Arrow 做贡献,本文将从高层次解释我们的方法。在文章的结尾,我们提供了以各种方式扩展此内容的文章链接。
包结构和约定
首先概述一下包的结构会很有帮助。
C++ 是一种面向对象的语言,因此 Arrow C++ 库的核心逻辑封装在类和方法中。在 Arrow R 包中,这些类被实现为 R6 类,其中大多数都从命名空间导出。
为了与 C++ 命名约定匹配,R6 类使用“大驼峰式命名法”命名,例如 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 用户可能最常遇到的这些工厂方法也有一个“蛇形命名法”的别名,以便当代 R 用户更熟悉。因此 record_batch(int = 1:10, dbl = as.numeric(1:10))
将与上面的 RecordBatch$create()
执行相同的操作。
Arrow R 包的典型用户可能永远不会直接处理 R6 对象。我们提供更友好的 R 包装器函数作为 C++ 库的更高级别接口。R 用户可以调用 read_parquet()
而无需知道或关心他们正在实例化 ParquetFileReader
对象并在其上调用 $ReadFile()
方法。这些类可供希望精细控制 C++ 库使用方式的高级程序员使用。