5

当我使用 R 开源时,如果不使用特定的包,则无法处理大于 RAM 内存的数据集。所以我想知道是否可以处理在 PostgreSQL 中应用 PL/R 函数的大数据集。

我没有找到任何关于此的文档。

4

2 回答 2

11

正如 Hong Ooi 所提到的,PL/R 将 R 解释器加载到 PostgreSQL 后端进程中。因此,您的 R 代码正在“在数据库中”运行。

没有通用的方法来处理内存限制,但至少有两种可能的选择:

  1. 定义一个自定义 PostgreSQL 聚合,并将您的 PL/R 函数用作“最终”函数。通过这种方式,您可以分组处理,因此不太可能出现记忆问题。有关更多详细信息,请参阅在线 PostgreSQL 文档和 PL/R 文档(我不经常发布到 stackoverflow,所以很遗憾,它不允许我为您发布实际的 URL)
  2. 使用由 PL/R 安装到 R 解释器中的 pg.spi.cursor_open 和 pg.spi.cursor_fetch 函数,以便将数据以块的形式分页到 R 函数中。

在此处查看 PL/R 文档:http: //www.joeconway.com/plr/doc/index.html

我猜您真正想要的是一个 data.frame,其中数据在底层数据库游标之间以透明方式分页到您的 R 代码。这是我长期的 TODO,但不幸的是我一直没能找到时间来解决它。有人告诉我Oracle 的R 连接器有这个功能,所以似乎可以做到。欢迎使用补丁 ;-)

于 2013-05-18T00:16:53.687 回答
1

不会。PL/R 只是启动一个单独的 R 进程来运行您的 R 代码。这使用与您在命令行中使用的完全相同的二进制文件和可执行文件,因此所有标准限制仍然适用。

于 2013-05-17T17:22:18.240 回答