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

How to load the latest 100 rows from Hbase to Spark

我正在使用 Spark 将 Hbase 数据加载到 JavaPairRDD<>。现在,我想知道是否可以将最新的 100 行而不是 Hbase 中的所有行加载到 Spark 中。 1) 我试过 scan.setCaching(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,您需要定义什么是LAST?用户的最后 100 activity 行或所有 table 中的最后 100 行插入行?如果你的意思是 table,hbase 不会 return 你的数据按照你写的顺序,它会 return 按行键字节值排序,所以你应该让你的 rowkey timebased 得到排序结果。但是 rowkey 的第一部分的时间会产生热点区域,所以你不应该这样做:)