如何根据spring数据hadoop中的“timestamp”过滤记录?

ssm49v7z  于 2021-06-02  发布在  Hadoop
关注(0)|答案(2)|浏览(407)

我有一个带有示例记录的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] .

ibrsph3r

ibrsph3r1#

希望有一天这能帮上忙。

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

另外,值得一提的是,timerange的最大值是独占的,因此如果希望返回带有该时间戳的记录,请确保将timerange的最大值增加1。

kupeojn6

kupeojn62#

使用hbase客户端的scanner对象解决了这个问题。

相关问题