我正在使用 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 x 100 的结果,如果有 100 个结果,如果没有,您将得到准确的结果计数一次 rpc 调用。 SetCaching 是与网络性能相关的优化,不会改变您从数据库中获得的结果计数。
对于排序的结果,例如,最后 100,您需要定义什么是 LAST?用户的最后 100 个 Activity ,或所有表中的最后 100 个插入行?如果你的意思是表,hbase 不会按照你写的顺序返回你的数据,它会按行键字节值排序返回,所以你应该让你的行键基于时间来获得有序的结果。但是 rowkey 的第一部分的时间会形成热点区域,所以你不应该那样做 :)
关于java - 如何从Hbase加载最新的100行到Spark,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34439871/