我使用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();
1条答案
按热度按时间7qhs6swi1#
scan.setcaching用于指定一个rpc调用中的结果计数,当您将其设置为100时,您的客户端将获得100乘100的结果,如果有100个结果,则您将在一个rpc调用中获得确切的结果计数。setcaching是一种与网络性能相关的优化,不会改变从db得到的结果计数。
对于有序结果,例如,last 100,您需要确定last是什么?用户的最后100个活动,还是所有表中插入的最后100行?如果您的意思是table,hbase将不会按您所写的顺序返回数据,它将按行键字节值的顺序返回,因此您应该使您的行键基于时间来获得有序的结果。但是rowkey的第一部分中的时间会生成热点区域,所以您不应该这样做:)