Получить R для загрузки данных в переменную из Java, без R, отправляющей информацию обратно в Java - PullRequest
1 голос
/ 02 декабря 2011

Я загружаю очень большой набор данных в R из Java. Я создал Java-программу, которая вызывает R, используя jri rJava. Эта программа была упакована в исполняемый файл jar и вызывается из терминала (linux). Данные находятся в области 50 столбцов на 13,7 миллиона строк. Один R может справиться с этим без проблем. Однако, когда я запускаю его из программы на Java, я получаю ошибку Java OutofMemory Heap.

Дело в том, что когда я запускаю его с половиной строк, он работает, но R должен отправлять только имена каждой переменной (всего 50) обратно в Java независимо от того, сколько строк есть. Это код, который я использую:

re.eval("names(data<-read.csv(file="data.csv", head=TRUE, sep=","));

Насколько я понимаю, функция re.eval оценивает выражение в R и отправляет результаты обратно в R. Можно ли как-то оценить функцию и не вернуть результат в java

Я задавал подобный вопрос раньше, вот ссылка: Оценка выражений, вызываемых из Java в R. Ошибка нехватки памяти: Java Heap

Ответы [ 2 ]

1 голос
/ 02 декабря 2011

Вы пытались отрегулировать размер кучи JVM, запустив исполняемый файл с параметрами?

Как:

java -Xmx1024m -Xms1024m myJar

Очевидно, вы можете настроить значения памяти, но опция -Xmxзадает максимальный размер кучи для JVM, а -Xms задает начальный размер.

Это может помочь, если вы обрабатываете большой объем данных, которые вам действительно нужно получить, в противном случае параметры (как предложено cdeszaq)вы не получите никаких данных обратно, очевидно, будет лучше всего подходит для вас.

0 голосов
/ 02 декабря 2011

Один из способов сделать это, который позволит вам вызывать R, не возвращая ничего в Java, - это вызывать R как внешний процесс.Поскольку, похоже, это примерно то, что вы делаете в любом случае, возможно, если ОС выполнит вызов R, а не библиотеку внутри Java, предотвратит переполнение.

...