HBase 扫描时间范围在 Scala 中不起作用

Posted

技术标签:

【中文标题】HBase 扫描时间范围在 Scala 中不起作用【英文标题】:HBase Scan TimeRange Does not Work in Scala 【发布时间】:2016-08-11 04:59:14 【问题描述】:

我编写 scala 代码来根据时间范围检索数据。这是我的代码:

object Hbase_Scan_TimeRange 

  def main(args: Array[String]): Unit = 
    //===Basic Hbase (Non Deprecated)===Start
    Logger.getLogger(this.getClass)
    Logger.getLogger("org").setLevel(Level.ERROR)
    BasicConfigurator.configure()
    val conf = HBaseConfiguration.create()
    val connection = ConnectionFactory.createConnection(conf)
    val admin  = connection.getAdmin()
    //===Basic Hbase (Non Deprecated)===End

    val scan = new Scan()
    val _min = 1470387596203L
    val _max = 1470387596204L
    scan.setTimeRange(1470387596203L,1470387596204L)
    val table = connection.getTable(TableName.valueOf("tm_movie"))
    val scanner  = table.getScanner(scan)
    var result = scanner.next()
    println()
    while (result != null ) 
      //===start
      println(result)
    
  

但是,它不起作用。它仍然显示来自tm_movie 的所有数据。

我希望它与 Hbase Shell 中的以下查询相同:

scan 'tm_movie',  TIMERANGE => [1470387596203,1470387596204] 

有什么想法吗?

【问题讨论】:

【参考方案1】:

我通过 Fix its Iterator 找到了解决方案,这是我的代码:

object Hbase_Scan_TimeRange 

  def main(args: Array[String]): Unit = 
    //===Basic Hbase (Non Deprecated)===Start
    Logger.getLogger(this.getClass)
    Logger.getLogger("org").setLevel(Level.ERROR)
    BasicConfigurator.configure()
    val conf = HBaseConfiguration.create()
    val connection = ConnectionFactory.createConnection(conf)
    val admin  = connection.getAdmin()
    //===Basic Hbase (Non Deprecated)===End

    val scans = new Scan()
    scans.setMaxVersions(1)
    val _min = 1470387596203L
    val _max = 1470387596204L
    scans.setTimeRange(1470387596203L, 1470387596204L)

    val table = connection.getTable(TableName.valueOf("tm_movie"))
    val scanner  = table.getScanner(scans)
    val result = scanner.iterator()
    while(result.hasNext)
    
        val data = result.next()
        val movieId = Bytes.toString(data.getValue(Bytes.toBytes("data"),Bytes.toBytes("movieId")))
        val movieName = Bytes.toString(data.getValue(Bytes.toBytes("data"),Bytes.toBytes("movieName")))
        val movieGenre = Bytes.toString(data.getValue(Bytes.toBytes("data"),Bytes.toBytes("movieGenre")))

        println()
        println("movieGenre::"+movieGenre)
        println("movieName::"+movieName)
        println("movieId::"+movieId)
    

  

【讨论】:

以上是关于HBase 扫描时间范围在 Scala 中不起作用的主要内容,如果未能解决你的问题,请参考以下文章

spark read 在 Scala UDF 函数中不起作用

BLE 扫描在 Android 中不起作用

WiFi扫描数据在android M中不起作用

Pyspark / pyspark 内核在 jupyter notebook 中不起作用

NSMutableAttributedString 在特定范围的 tableviewcell 中不起作用

日期范围在聚合管道中不起作用,但在 find() 中起作用