在infosphere流中使用Java API中的Java自定义运算符

时间:2017-01-29 13:23:24

标签: infosphere-spl ibm-infosphere

我一直在寻找如何使用带有infosphere流Java API的自定义Java运算符

我需要的是在编写如下的自定义操作符后...

public class Test extends AbstractOperator {
private int i;
private int num;
@Override
public synchronized void initialize(OperatorContext context) throws Exception {
super.initialize(context);
i = 0; ....

我想像下面那样使用它......

        Topology topology = new Topology("toplogy_test");
        TStream<String> inDataFileName = ...
//call the "Test" operator here

1 个答案:

答案 0 :(得分:0)

您可以通过执行以下操作从拓扑API调用Java运算符/ C ++运算符:

  1. 添加Java运算符的工具包:

    SPL.addToolkit(拓扑,新文件(“/ home / streamsadmin / myTk”));

  2. 将传入流转换为SPL流:

    StreamSchema rstringSchema = Type.Factory.getStreamSchema("tuple<rstring rstring_attr_name>");
    
    SPLStream splInputStream = SPLStreams.convertStream(inDataFileName, new BiFunction<String, OutputTuple, OutputTuple>(){
    
      @Override
      public OutputTuple apply(String input_string, OutputTuple output_rstring) {
        output_rstring.setString("rstring_attr_name", input_string);
        return output_rstring;
      }}, rstringSchema);
    
  3. 调用运算符:

    SPLStream splOutputStream = SPL.invokeOperator(“OperatorNamespace :: YourOperatorName”,splInputStream,rstringSchema,new HashMap());

  4. 您可以在此处找到有关此内容的更多信息:

    http://ibmstreams.github.io/streamsx.documentation/docs/4.2/java/java-appapi-devguide/#integrating-spl-operators-with-the-java-application-api

    另外,如果您正在考虑使用拓扑API编写Streams拓扑,那么编写常规Java类会更容易,并直接从拓扑API调用它。

    例如:

    MyJavaCode someObj = new MyJavaCode();
    
    Topology topology = new Topology("MyTopology");
    TStream<String> inDataFileName = ...
    inDataFileName.transform(new Function<String, String>(){
            @Override
            public String apply(String word) {
                return someObj.someFunction(word);
            }
        });
    

    此处唯一的要求是您的Java类需要实现Serializable。