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

Cassandra Hadoop reduce output a map column type java

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

它工作正常,但我想让 reduce 输出开始将数据插入到具有 Map 列类型的 Cassandra table。

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

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

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

我设法弄清楚我想做什么,很抱歉回答我自己的问题只是认为它可以帮助处于类似情况的人。或者能告诉我,我的新思路也是错误的。

我实际上误解了减速器的 KeyValueOut 实际在做什么。我的假设是,我可以将此值更改为我想写入 Cassandra 的任何值,并且底层驱动程序会直接接收它。例如 Map 或 Text 或 Blob。但是,我现在认为它必须始终是一个字节缓冲区列表,以允许任何内容从 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);
    }

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

类型的 Cassandra Column