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

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

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

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

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

  1. private static final byte[] CF_INFO = Bytes.toBytes("u");
  2. private static final byte[] baseUrl = Bytes.toBytes("a");
  3. List<Model> allNewsList
  4. = hbaseTemplate.find(tableName, columnFamily, new RowMapper<News>()
  5. {
  6. @Override
  7. public Model mapRow(Result result, int rowNum)
  8. throws Exception
  9. {
  10. String dateString = TextUtils.getTimeStampInLong(result.toString());
  11. String rowKey = Bytes.toString(result.getRow());
  12. return new Model(
  13. rowKey,
  14. Bytes.toString(result.getValue(CF_INFO, col_a)
  15. );
  16. }
  17. });

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

ibrsph3r

ibrsph3r1#

希望有一天这能帮上忙。

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

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

kupeojn6

kupeojn62#

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

相关问题