Cassandra Hadoop将输出缩减为映射列类型java

Cassandra Hadoop将输出缩减为映射列类型java,java,hadoop,mapreduce,cassandra,Java,Hadoop,Mapreduce,Cassandra,我目前正在使用Hadoop和Cassandra运行Map Reduce任务 它工作得很好,但我希望允许reduce输出开始向具有Map列类型的Cassandra表插入数据 我只是简单地将value out类型更改为映射到Reducer中,但这开始在cassandra.hadoop实现内部引起问题,因为它总是需要一个列表 我已尝试更改OutputValueClass设置,但无效 是否有其他人有幸输出列表以外的内容,或者能够为我指明方向,让我了解如何实现它 我设法弄明白了我想做什么,为回答我自己的问

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

它工作得很好,但我希望允许reduce输出开始向具有Map列类型的Cassandra表插入数据

我只是简单地将value out类型更改为映射到Reducer中,但这开始在cassandra.hadoop实现内部引起问题,因为它总是需要一个列表

我已尝试更改OutputValueClass设置,但无效


是否有其他人有幸输出列表以外的内容,或者能够为我指明方向,让我了解如何实现它

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

我实际上误解了减速机的KeyValueOut实际上在做什么。我的假设是,我可以将这个值更改为我想写给Cassandra的任何内容,而底层驱动程序只会选择它。例如,映射、文本或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列