2013-05-17 51 views
4

當我使用R開放源代碼時,如果不使用特定包,則不可能處理大於RAM內存的數據集。所以我想知道是否可以處理在PostgreSQL中應用PL/R函數的大數據集。在PostgreSQL上運行PL/R時,R可以處理大於RAM的數據嗎?

我沒有找到任何關於此的文檔。

+3

不,你不能。 – jwijffels

+2

另外,請考慮'ff'軟件包,它允許您在磁盤上存儲大量數據。 – nograpes

+2

有一些方法可以在數據庫中真正運行R嗎? (非商業用途,如R on Oracle) –

回答

11

正如Hong Ooi所說,PL/R將R解釋器加載到PostgreSQL後端進程中。所以你的R代碼正在「在數據庫中」運行。

有處理內存的限制沒有普遍的方式,但也有至少兩個可能的選擇:

  1. 定義自定義PostgreSQL聚集,並使用你的PL/R功能 「最終」功能。這樣你就可以分組處理,並且因此不太可能存在內存問題。有關更多詳細信息,請參閱聯機PostgreSQL文檔和PL/R文檔(我不經常發佈到計算器,因此不幸的是,它不會允許我爲您發佈實際URL)
  2. 使用pg.spi.cursor_open和pg .spi.cursor_fetch函數將 PL/R安裝到R解釋器中,以便將數據分頁到您的R函數中。

見PL/R文檔瀏覽:http://www.joeconway.com/plr/doc/index.html

我猜你真的想擁有的是其中的數據分頁到並從底層數據庫遊標透明到您的R A data.frame碼。這是對我的長期TODO,但不幸的是我還沒有找到時間來解決它。我被告知Oracle的R連接器有這個功能,所以看起來可以完成。修補程序歡迎;-)

+0

非常感謝您的回答!我使用了很多PostgreSQL和R,當我知道PL/R時,我對解決R內存約束的可能性感到很興奮,同時也擁有SQL的強大功能。 –

1

No. PL/R只是啓動一個單獨的R進程來運行你的R代碼。這會使用與您在命令行中使用的完全相同的二進制文件和可執行文件,因此所有標準限制仍然適用。

+0

好的,但是有一些方法可以運行真正的「在數據庫分析中用」R? –

相關問題