cassandrahadoop reduce输出一个Map列类型java

sycxhyv7  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(426)

我目前正在使用hadoop和cassandra运行map reduce任务。
它工作得很好,但是我想让reduce输出开始向具有map列类型的cassandra表插入数据。
我尝试过简单地将value out类型更改为在reducer中Map,但是这开始在cassandra.hadoop实现内部引起问题,因为它总是需要一个列表。
我试图更改outputvalueclass设置,但没有效果。
是否有其他人有幸输出列表以外的内容,或者能够为我指明方向,以了解如何实现它。

2sbarzqh

2sbarzqh1#

我设法弄明白了我想做什么,为回答我自己的问题而道歉,只是觉得这可能会对处于类似情况的人有所帮助。或者可以告诉我,我的新思维方式也是错误的。
我实际上误解了减速机的keyvalueout实际上在做什么。我的假设是,我可以将这个值更改为我想写给cassandra的任何内容,并且底层驱动程序只会选择它。例如Map、文本或blob。然而,我现在认为,它总是必须是一个bytebuffers列表,以允许任何东西从hadoop进入cassandra。
我通过使用以下方法成功地使用了正确的类型:

private ByteBuffer ExampleForMapTypes(JSONObject data){
        Map<String, String> mapper = new HashMap<>();            
        String user = data.get("Map_Left").toString();
        String agent = data.get("Map_Right").toString();
        mapper.put(user, agent);

        return MapType
          .getInstance(UTF8Type.instance, UTF8Type.instance)
          .decompose(mapper);
    }

decompose方法将返回bytebuffer,这反过来又允许cassandra驱动程序读取输出并在查询中正确处理它。在本例中,它将输出到map类型的cassandra列

相关问题