如何从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 的第一部分的时间会产生热点区域,所以你不应该这样做:)
我正在使用 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 的第一部分的时间会产生热点区域,所以你不应该这样做:)