如何将最新的100行从Hbase加载到Spark



我正在使用Spark将Hbase数据加载到JavaPairRDD<>中。现在,我想知道是否可以将最近的100行加载到Spark中,而不是从Hbase中加载所有行。1) 我尝试扫描.setCacheching(100),但它仍然返回所有行。这是为了限制我从Hbase加载的行吗?2) 我如何确保它是最新的100行

有什么想法吗?非常感谢。

    Scan scan = new Scan();
    scan.setFilter(A list of filters);
    scan.setCaching(100);
    ClientProtos.Scan proto = ProtobufUtil.toScan(scan);
    String scanStr = Base64.encodeBytes(proto.toByteArray());
    hbaseConfig.set(TableInputFormat.INPUT_TABLE, tableName);
    hbaseConfig.set(TableInputFormat.SCAN,scanStr);
    JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD = 
            javaSparkContext.newAPIHadoopRDD(hbaseConfig, TableInputFormat.class, ImmutableBytesWritable.class, Result.class).cache();

Scan.setCaching用于指定一个RPC调用中的结果计数,当您将其设置为100时,您的客户端将获得100乘100的结果,如果有100个结果,如果没有,您将在一个RPC调用中获得精确的结果计数。SetCaching是一种与网络性能相关的优化,它不会改变数据库的结果计数。

对于排序结果,例如最后100,您需要确定最后是什么?用户的最后100个活动,还是所有表中最后100个插入的行?如果你指的是表,hbase不会按照你写的顺序返回你的数据,它会按照行键字节值的顺序返回,所以你应该让你的行键基于时间来获得有序的结果。但是rowkey第一部分的时间会成为热点区域,所以您不应该这样做:)

最新更新