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

Java 如何将最新的100行从Hbase加载到Spark,java,apache-spark,hbase,Java,Apache Spark,Hbase,我正在使用Spark将Hbase数据加载到JavaPairDD中。现在,我想知道是否可以将最新的100行加载到Spark中,而不是从Hbase加载所有行。1) 我尝试了scan.setCaching(100),但它仍然返回所有行。是为了限制我从Hbase加载的行吗?2) 如何确保它是最新的100行 有什么想法吗?非常感谢 Scan scan = new Scan(); scan.setFilter(A list of filters); scan.setCaching(1

我正在使用Spark将Hbase数据加载到JavaPairDD中。现在,我想知道是否可以将最新的100行加载到Spark中,而不是从Hbase加载所有行。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扫描=新扫描();
scan.setFilter(过滤器列表);
扫描设置缓存(100);
ClientProtos.Scan proto=ProtobufUtil.toScan(扫描);
字符串scanStr=Base64.encodeBytes(proto.toByteArray());
hbaseConfig.set(TableInputFormat.INPUT\u TABLE,tableName);
hbaseConfig.set(TableInputFormat.SCAN,scanStr);
JavaPairRDD hBaseRDD=
javaSparkContext.newAPIHadoopRDD(hbaseConfig,TableInputFormat.class,ImmutableBytesWritable.class,Result.class).cache();

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

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