我把一个图像变成一个二维整数数组。在这上面做一些处理,然后我尝试以这种方式发射阵列:
collector.emit( new Values ( scaledImageMatrix ) );
然后我尝试在另一个螺栓中检索数据,如下所示:
int [][] imageMatrix = input.get("scaled-image-matrix");
但我得到了错误
incompatible types
[ERROR] found : java.lang.Object
[ERROR] required: int[][]
有什么建议吗?
更新:
我试过了 int [][] imageMatrix = (int[][])input.get("scaled-image-matrix");
我有个错误:
java.lang.IllegalArgumentException: Tuple created with wrong number of fields. Expected 1 fields but got 190 fields
那么我应该把问题改为:如何发射二维阵列?
2条答案
按热度按时间pvcm50d11#
我知道这是个老问题,但这也很有用。基本数组可以在
execute(Tuple input)
方法就像任何其他对象一样,您只需要使用getValue(fieldName)
方法而不是get(fieldName)
:8wtpewkr2#
我想除了自己为二维数组构建一个序列化程序之外,这是不可能的。
storm将尝试猜测元组的类型,并查看它是否可以序列化。任何发出的东西都已经序列化了,所以无法发送任何不能序列化的对象。
默认情况下,storm可以序列化基元类型、字符串、字节数组、arraylist、hashmap、hashset和clojure集合类型。
所以我建议使用
ArrayList
或clojure的vector
相反,或者自己编写一个自定义kryo序列化程序。看这里的文件。