如何根据Spring Data Hadoop中的`timestamp`过滤记录?

时间:2015-08-10 17:58:19

标签: spring hadoop hbase spring-data spring-data-hadoop

我有一个带有示例记录的hbase表,如下所示:

  03af639717ae10eb743253433147e133                 column=u:a, timestamp=1434300763147, value=apple
  10f3d7f8fe8f25d5bdf52343a2601227                 column=u:a, timestamp=1434300763148, value=mapple
  20164b1aff21bc14e94623423a9d645d                 column=u:a, timestamp=1534300763142, value=papple
  44d1cb38271362d20911a723410b2c67                 column=u:a, timestamp=1634300763141, value=scapple

我迷失了,因为我试图根据时间戳取出行值。我正在使用spring data hadoop。 我只能使用以下代码获取所有记录:

 private static final byte[] CF_INFO = Bytes.toBytes("u");
 private static final byte[] baseUrl = Bytes.toBytes("a");

 List<Model> allNewsList
            = hbaseTemplate.find(tableName, columnFamily, new RowMapper<News>()
            {
                @Override
                public Model mapRow(Result result, int rowNum)
                throws Exception 
                {
                    String dateString = TextUtils.getTimeStampInLong(result.toString());
                    String rowKey = Bytes.toString(result.getRow());
                    return new Model(                                
                        rowKey,
                        Bytes.toString(result.getValue(CF_INFO, col_a)
                    );
                }
            });

如何应用过滤器,以便能够在时间戳[1434300763147,1534300763142]内获取记录。

2 个答案:

答案 0 :(得分:1)

希望这有一天能对某人有所帮助。

final org.apache.hadoop.hbase.client.Scan scan = new Scan();
scan.setTimeRange(1434300763147,1534300763142);
final List<Model> yourObjects = hbaseTemplate.find(tableName, scan, mapper);

另外,值得一提的是,时间范围的最大值是互斥的,因此,如果要返回带有该时间戳的记录,请确保将时间范围的最大值增加1。

答案 1 :(得分:0)

使用Hbase客户端的扫描程序对象解决了该问题。