我目前正在使用hadoop和cassandra运行map reduce任务。它工作得很好,但是我想让reduce输出开始向具有map列类型的cassandra表插入数据。我尝试过简单地将value out类型更改为在reducer中Map,但是这开始在cassandra.hadoop实现内部引起问题,因为它总是需要一个列表。我试图更改outputvalueclass设置,但没有效果。是否有其他人有幸输出列表以外的内容,或者能够为我指明方向,以了解如何实现它。
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列
1条答案
按热度按时间2sbarzqh1#
我设法弄明白了我想做什么,为回答我自己的问题而道歉,只是觉得这可能会对处于类似情况的人有所帮助。或者可以告诉我,我的新思维方式也是错误的。
我实际上误解了减速机的keyvalueout实际上在做什么。我的假设是,我可以将这个值更改为我想写给cassandra的任何内容,并且底层驱动程序只会选择它。例如Map、文本或blob。然而,我现在认为,它总是必须是一个bytebuffers列表,以允许任何东西从hadoop进入cassandra。
我通过使用以下方法成功地使用了正确的类型:
decompose方法将返回bytebuffer,这反过来又允许cassandra驱动程序读取输出并在查询中正确处理它。在本例中,它将输出到map类型的cassandra列