Как использовать RScript Operator с Java Streams Java Application Api?

Я изучаю Java Application Api в IBM Streams, поэтому он выглядит многообещающе. Я могу создавать топологии и запускать их в автономном режиме в распределенном режиме.

Теперь я пытаюсь увидеть, как вызвать R-скрипт из топологии Java. Я думаю, что один из способов - использовать оператор com.ibm.streams.rproject::RScript в моей топологии Java.

Вот мой полный код:

SPLStream tuples = testTupleStream(topology);

        //tuples.print();
        topology.createSubmissionParameter("rCommand", "/usr/local/bin/R --vanilla");



        // Filter on the vi attribute, passing the value 321.
        Map<String,Object> params = new HashMap<>();
        params.put("rObjects", "first, second");
        params.put("rScriptFileName", "./etc/print.r");
        params.put("streamAttributes", "number1, number2");

        //params.put("filter", SPL.createValue(" vi == 321 ", MetaType.BOOLEAN));
        SPL.createSubmissionParameter(topology, "rsample", SPL.createValue(true, MetaType.BOOLEAN), true);

        //String toolkitRoot = "/opt/ibm/InfoSphere_Streams/4.0.1.0/toolkits";
        //SPL.addToolkit(tuples, new File(toolkitRoot));
        SPLStream int32Filtered = SPL.invokeOperator("rsampleoperator","com.ibm.streams.rproject::RScript", tuples, tuples.getSchema(), params);
        int32Filtered.print();

Но когда я запускаю выше топологии, я получаю следующую ошибку:

        09 Nov 2015 04:09:53.234 [5407] ERROR #splapptrc,J[5],P[5],rsampleoperator,spl_pe M[PEImpl.cpp:process:841]  - CDISR5079E: An exception occurred during the processing of the processing element. The error is: An operator was attempting to access the data directory and no data directory has been specified..
09 Nov 2015 04:09:53.241 [5407] ERROR #splapptrc,J[5],P[5],rsampleoperator,spl_operator M[PEImpl.cpp:process:872]  - CDISR5053E: Runtime failures occurred in the following operators: rsampleoperator.

Подскажите, пожалуйста, что я делаю не так? Любое понимание использования операторов SPL в Java API поможет?

Спасибо судхер

1 ответ

Поскольку это API-интерфейс Java, я считаю, что вам нужно установить свойство каталога данных как часть свойств задания:

http://ibmstreams.github.io/streamsx.topology/doc/javadoc/com/ibm/streamsx/topology/context/JobProperties.html

Затем свойства могут быть переданы в контекст при отправке задания: StreamsContext.submit(com.ibm.streamsx.topology.Topology, java.util.Map)

Существует также руководство по разработке API Java-приложений, вы можете найти его здесь: http://ibmstreams.github.io/streamsx.documentation/docs/4.1/java/java-appapi-devguide/

Надеюсь это поможет.

Саманта

Другие вопросы по тегам