在PostgreSQL上运行PL / R时,R可以处理比RAM更大的数据吗?

时间:2013-05-17 15:04:36

标签: r postgresql bigdata plr

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

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

2 个答案:

答案 0 :(得分:11)

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

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

  1. 定义自定义PostgreSQL聚合,并使用您的PL / R函数 “最终”功能。通过这种方式,您可以在组中进行处理 因此不太可能有记忆问题。有关更多详细信息,请参阅在线PostgreSQL文档和PL / R文档(我不经常发布到stackoverflow,所以不幸的是它不允许我为您发布实际的URL)。
  2. 使用安装的pg.spi.cursor_open和pg.spi.cursor_fetch函数 PL / R进入R解释器,以便以块的形式将数据分页到R函数中。
  3. 请参阅此处的PL / R文档:http://www.joeconway.com/plr/doc/index.html

    我猜你真正想要的是一个data.frame,其中数据被分页到底层数据库游标以及透明地传递给你的R代码。这是我长期的TODO,但遗憾的是我还没有时间来解决这个问题。我被告知Oracle的R连接器具有此功能,所以它似乎可以完成。欢迎补丁; - )

答案 1 :(得分:1)

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