Cassandra Hadoop减少输出一个映射列类型java



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

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

我只是尝试简单地将Reducer中的值输出类型更改为Map,但这开始在cassandra.hoop实现内部引起问题,因为它总是需要List。

我曾尝试更改OutputValueClass设置,但没有成功。

有没有其他人有幸输出List以外的东西,或者能够为我指明方向,让我了解它是如何实现的。

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

实际上,我误解了减速器的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列

相关内容

  • 没有找到相关文章

最新更新