0

我正在将图像转换为二维整数数组。对此进行一些处理,然后我尝试以这种方式发出数组:

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

那么我应该将我的问题改为:如何发出二维数组?

4

2 回答 2

2

我知道这是个老问题,但这也很有用。原始数组可以execute(Tuple input)像任何其他对象一样在方法中发出和接收,您只需要使用getValue(fieldName)方法而不是get(fieldName)

int[][] imageMatrix = (int[][]) input.getValue("scaled-image-matrix")
于 2017-05-05T12:02:12.177 回答
0

我想这是不可能的,除非你自己为二维数组构建一个序列化器。

Storm 会尝试猜测一个元组的类型,看看它是否可以被序列化。任何发出的东西都已经序列化了,所以没有办法发送任何无法序列化的对象。

默认情况下,Storm 可以序列化原始类型、字符串、字节数组、ArrayList、HashMap、HashSet 和 Clojure 集合类型。

所以我建议改用ArrayListClojure 的vector,或者自己写一个自定义的kryo序列化器。请参阅此处的文档。

于 2014-08-13T16:26:07.500 回答