Ошибка при доступе к Rapid Miner API из java-программы

У меня есть демонстрационные данные, которые мне нужно сгруппировать. Утилита должна отправлять данные алгоритму быстрого майнера, а затем извлекать результат. Я использовал Rapid Miner API, чтобы использовать существующие алгоритмы быстрого майнера. Однако я столкнулся с проблемой, используя этот API.

Класс Java:

package rajeev.rapidminer.main;

import java.io.File;
import java.io.IOException;

import com.rapidminer.Process;
import com.rapidminer.RapidMiner;
import com.rapidminer.RapidMiner.ExecutionMode;
import com.rapidminer.operator.IOObject;
import com.rapidminer.operator.OperatorException;
import com.rapidminer.repository.IOObjectEntry;
import com.rapidminer.repository.MalformedRepositoryLocationException;
import com.rapidminer.repository.RepositoryException;
import com.rapidminer.repository.RepositoryLocation;
import com.rapidminer.tools.XMLException;



public class Main {

public static void main(String a[]) throws IOException, XMLException, RepositoryException, OperatorException
{
    String rmpPath="C:/Users/rajeev-s/.RapidMiner5/repositories/Local Repository/DemoClustering.rmp";
    RapidMiner.setExecutionMode(ExecutionMode.COMMAND_LINE);
    RapidMiner.init();
    Process process=new Process(new File(rmpPath));

    RepositoryLocation modelLocation=new RepositoryLocation("//C:/Users/rajeev-s/.RapidMiner5/repositories/Local Repository/ClusterDemoOutput");
    IOObject model=((IOObjectEntry)modelLocation.locateEntry()).retrieveData(null);

    RepositoryLocation testDataLocation=new RepositoryLocation("//LocalRepository/TestData.txt");
    IOObject testData=((IOObjectEntry)testDataLocation.locateEntry()).retrieveData(null);

    com.rapidminer.operator.IOContainer ioInput = new com.rapidminer.operator.IOContainer(new IOObject[] { model, testData });
    process.run(ioInput);
    process.run(ioInput);
    final long start = System.currentTimeMillis();
    final com.rapidminer.operator.IOContainer ioResult = process.run(ioInput);
    final long end = System.currentTimeMillis();
    System.out.println("T:" + (end - start));
}

}

Трассировка стека ошибок:

Oct 25, 2013 6:28:53 PM com.rapidminer.tools.ParameterService init
INFO: Reading configuration resource com/rapidminer/resources/rapidminerrc.
Oct 25, 2013 6:28:53 PM com.rapidminer.tools.I18N <clinit>
INFO: Set locale to en.
Oct 25, 2013 6:28:54 PM com.rapid_i.Launcher ensureRapidMinerHomeSet
INFO: Property rapidminer.home is not set. Guessing.
Oct 25, 2013 6:28:54 PM com.rapid_i.Launcher ensureRapidMinerHomeSet
INFO: Trying parent directory of 'C:\Program Files\Rapid-     I\RapidMiner5\lib\launcher.jar'...gotcha!
Oct 25, 2013 6:28:54 PM com.rapid_i.Launcher ensureRapidMinerHomeSet
INFO: Trying parent directory of 'C:\Program Files\Rapid-   I\RapidMiner5\lib\rapidminer.jar'...gotcha!
Oct 25, 2013 6:29:00 PM com.rapidminer.tools.expression.parser.ExpressionParserFactory  <clinit>
INFO: Default version of expression parser registered successfully
Oct 25, 2013 6:29:06 PM com.rapidminer.parameter.ParameterTypePassword decryptPassword
WARNING: Password in XML file looks like unencrypted plain text.
Oct 25, 2013 6:29:10 PM com.rapidminer.tools.OperatorService init
INFO: Number of registered operator classes: 443; number of registered operator    descriptions: 444; number of replacements: 403
Oct 25, 2013 6:29:10 PM com.rapidminer.tools.jdbc.JDBCProperties <init>

ПРЕДУПРЕЖДЕНИЕ. Отсутствует имя класса драйвера базы данных для моста ODBC (например, Access) 25 октября 2013 г. 18:29:10 com.rapidminer.tools.jdbc.JDBCProperties registerDrivers ИНФОРМАЦИЯ: Драйвер JDBC ca.ingres.jdbc.IngresDriver не найден. Скорее всего драйвер не установлен. [Фатальная ошибка] :1:1: Преждевременный конец файла. Исключение в потоке "main" com.rapidminer.repository.RepositoryException: запрошенный репозиторий C: не существует. в com.rapidminer.repository.RepositoryManager.getRepository(RepositoryManager.java:201) в com.rapidminer.repository.RepositoryLocation.getRepository(RepositoryLocation.java:139) в com.rapidminer.repository.RepositoryLocation.locateEntry(RepositoryLocation.java:162) ) на rajeev.rapidminer.main.Main.main(Main.java:29)

Когда я скопировал «Локальный репозиторий» в свой путь к классу и изменил путь на:

//Local Repository/ClusterDemoOutput

затем генерируется следующая трассировка стека:

Exception in thread "main" com.rapidminer.repository.RepositoryException: Requested  repository LocalRepository does not exist.
    at     com.rapidminer.repository.RepositoryManager.getRepository(RepositoryManager.java:201)
    at  com.rapidminer.repository.RepositoryLocation.getRepository(RepositoryLocation.java:139)
    at  com.rapidminer.repository.RepositoryLocation.locateEntry(RepositoryLocation.java:162)
    at rajeev.rapidminer.main.Main.main(Main.java:29)

Подскажите, пожалуйста, где разместить репозиторий.

Также любезно предложите любой подходящий блог или учебник, в котором объясняется, как использовать алгоритмы Rapid Miner из кода Java (материал, который я искал в Google, не упоминает всех деталей)

Спасибо


person Rajeev Singh    schedule 25.10.2013    source источник
comment
ты с ним справился? У меня та же проблема.   -  person andilabs    schedule 17.01.2014
comment
привет энди. Я попробовал и получил рабочее решение. Я только что удалил строки метода main(), содержащие RepositoryLocation, а путь к файлу .rmp при создании Process был изменен на com.rapidminer.Process myProcess = new com.rapidminer.Process(new File("D:\\HCL\\drools\\Repository1\\Example1.rmp"));, это решение сработало для меня.   -  person Rajeev Singh    schedule 17.01.2014
comment
@andi: Если вам нужен код, я вставил его как решение.   -  person Rajeev Singh    schedule 17.01.2014


Ответы (2)


Я получил рабочее решение для упомянутой проблемы. Я не уверен, что это лучший, но это сработало для меня.

public class MinerForum {
    public static void main(String a[]) throws IOException, XMLException,  RepositoryException, OperatorException
    {
        int[] data={1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
        List<Attribute> attributes=new ArrayList<Attribute>();
        String[] columns={"column1"};
        DataTable table=new SimpleDataTable("table1",columns);      
        for(int i=0;i<21;i++)
        {
            double[] value={i};
            DataTableRow row=new SimpleDataTableRow(value, i+"");
            table.add(row);
        }

        RapidMiner.setExecutionMode(ExecutionMode.COMMAND_LINE);
        RapidMiner.init();      
        com.rapidminer.Process myProcess = new com.rapidminer.Process(new File    ("D:\\drools\\Repository1\\Example1.rmp"));       
        IOContainer ioInput = new IOContainer();        
        IOContainer ioResult = myProcess.run(ioInput);
        // simple use 'ioResult' to display the results you want.       
    }   
}
person Rajeev Singh    schedule 17.01.2014

уверены, что

new RepositoryLocation("//C:/Users/

является действительным местоположением? Для меня это больше похоже на опечатку.

Тем не менее, вам, возможно, следует спросить на форумах Rapidminer; у вас гораздо больше шансов поговорить с экспертами по Rapidminer там, чем на сайте программирования общего назначения.

person Has QUIT--Anony-Mousse    schedule 25.10.2013
comment
Anony-Mousse: На самом деле изначально я указал местоположение как «C:/...», но в трассировке стека было упомянуто, что местоположение должно быть похоже на «//RepositoryLocation/path/to/file», поэтому я изменил его соответствующим образом. - person Rajeev Singh; 26.10.2013
comment
Думаю, простое добавление двух косых черт не преобразует имя пути в репозиторий. - person Has QUIT--Anony-Mousse; 26.10.2013