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 函数中不起作用
Pyspark / pyspark 内核在 jupyter notebook 中不起作用