有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java StormHBase Trident同时查询多个列

我正在构建一个查询HBasState的三叉戟拓扑。我正在使用组织。阿帕奇。暴风雨hbase包

我的理解(如果我错了,请纠正我)是HBaseQuery读取给定行键的所有列值(或projectionCriteria中指定的列值),并使用字段(“columnName”、“columnValue”)单独输出每一列

例如,如果我有一个宠物表,rowKey是宠物名,一列是“type”,一列是“age”,stateQuery将接收带有值(“Fido”)的输入元组,并将输出两个独立的元组,其中:

值(“Fido”、“类型”、“狗”)

价值(“Fido”,“年龄”,11)

一些问题:

  1. 有没有办法在一个查询中从多个列中获取值?也就是说,我可以获得带有字段(“Name”、“column1Value”、“column2Value”)的单个输出吗

  2. 如果有一种方法可以将多个列中的值放入一个元组,那么如果它们属于不同的类型(例如,一个是字符串,一个是整数),是否仍然可以这样做

最终,我的目标是能够获取带有字段(“名称”)的输入元组,并获取带有字段(“名称”、“类型”、“年龄”)的单个输出元组,例如值(“Fido”、“Dog”,11)和值(“Kibbles先生”、“Cat”,4)。如果不可能使用上述方法,如何实现

谢谢你的帮助


共 (1) 个答案

  1. # 1 楼答案

    我自己解决了这个问题,在这里为子孙后代发帖:

    我之所以遇到困难,是因为我在WordCountValueMapper的基础上进行构建,而实际上并不了解它是如何被使用的。对结果课进行更深入的挖掘会有所帮助

    以下是我现在如何实施它:

    public static class MyValueMapper implements HBaseValueMapper {
      @Override
      public List<Values> toValues(ITuple tuple, Result result) throws Exception {
        List<Values> values = new ArrayList<Values>();
        Cell[] cells = result.rawCells();
    
        values.add(new Values(Bytes.toString(CellUtil.cloneValue(cells[0])), Bytes.toInt(CellUtil.cloneValue(cells[1]))));
        return values;
      }
      @Override
      public void declareOutputFields(OutputFieldsDeclarer declarer) {
        declarer.declare(new Fields("type","age"));
      }
    }
    

    在WordCountValueMapper中,它们遍历结果中的每个单元格,这相当于遍历每个列。取而代之的是,我取下整个单元格数组,然后取出值。没什么聪明的,我只是以前不懂