发出整数数组并检索它

unguejic  于 2021-06-21  发布在  Storm
关注(0)|答案(2)|浏览(428)

我把一个图像变成一个二维整数数组。在这上面做一些处理,然后我尝试以这种方式发射阵列:

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

那么我应该把问题改为:如何发射二维阵列?

pvcm50d1

pvcm50d11#

我知道这是个老问题,但这也很有用。基本数组可以在 execute(Tuple input) 方法就像任何其他对象一样,您只需要使用 getValue(fieldName) 方法而不是 get(fieldName) :

int[][] imageMatrix = (int[][]) input.getValue("scaled-image-matrix")
8wtpewkr

8wtpewkr2#

我想除了自己为二维数组构建一个序列化程序之外,这是不可能的。
storm将尝试猜测元组的类型,并查看它是否可以序列化。任何发出的东西都已经序列化了,所以无法发送任何不能序列化的对象。
默认情况下,storm可以序列化基元类型、字符串、字节数组、arraylist、hashmap、hashset和clojure集合类型。
所以我建议使用 ArrayList 或clojure的 vector 相反,或者自己编写一个自定义kryo序列化程序。看这里的文件。

相关问题