我一直在寻找如何使用带有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
答案 0 :(得分:0)
您可以通过执行以下操作从拓扑API调用Java运算符/ C ++运算符:
添加Java运算符的工具包:
SPL.addToolkit(拓扑,新文件(“/ home / streamsadmin / myTk”));
将传入流转换为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);
调用运算符:
SPLStream splOutputStream = SPL.invokeOperator(“OperatorNamespace :: YourOperatorName”,splInputStream,rstringSchema,new HashMap());
您可以在此处找到有关此内容的更多信息:
另外,如果您正在考虑使用拓扑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。