Cassandra Hadoop减少输出地图列类型java

时间:2015-03-25 14:29:12

标签: java hadoop mapreduce cassandra

我目前正在使用Hadoop和Cassandra来运行Map Reduce任务。

它工作正常,但我想允许reduce输出开始使用Map列类型将数据插入到Cassandra表中。

我试过只是简单地将值输出类型更改为Reducer中的Map,但这开始导致cassandra.hadoop实现内部问题,因为它始终需要List。

我试图更改OutputValueClass设置,但无济于事。

有没有其他人能够输出除List之外的东西,或者能够指出我的方向来理解它是如何实现的。

1 个答案:

答案 0 :(得分:0)

我设法弄明白我想做什么,为回答我自己的问题而道歉,只是认为它可以帮助处于类似情况的人。或者能够告诉我,我的新思维方式也是错误的。

我实际上误解了减速器的KeyValueOut实际上在做什么。我的假设是,我可以将此值更改为我想写给Cassandra的任何内容,并且底层驱动程序只会将其读取。例如Map或Text或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);
    }

分解方法将返回ByteBuffer,这反过来允许Cassandra驱动程序读取输出的内容并在查询中正确处理它。在此示例中,它将输出到Map

类型的Cassandra列