Scala HBase多个前置过滤器&x2B;设置限制

Scala HBase多个前置过滤器&x2B;设置限制,scala,apache-spark,hadoop,hbase,cloudera-cdh,Scala,Apache Spark,Hadoop,Hbase,Cloudera Cdh,我有一个行前缀列表。我想为每个前缀查询N行 我无法使用MultiRowRangeFilter,因为我不知道该范围的结束行键前缀是什么。我也不能使用scan.setLimit(N),因为我认为它会将查询的总行数限制为N(我希望每个前缀都有N行) 我当前的设置: val hbaseConf = HBaseConfiguration.create() // set zookeeper quorum properties in hbaseConf val hbaseContext = new HBas

我有一个行前缀列表。我想为每个前缀查询N行

我无法使用MultiRowRangeFilter,因为我不知道该范围的结束行键前缀是什么。我也不能使用scan.setLimit(N),因为我认为它会将查询的总行数限制为N(我希望每个前缀都有N行)

我当前的设置:

val hbaseConf = HBaseConfiguration.create()
// set zookeeper quorum properties in hbaseConf

val hbaseContext = new HBaseContext(sc, hbaseConf)

val rowPrefixes = Array("a", "b", "c")
val filterList = new FilterList()

rowPrefixes.foreach { x => filterList.addFilter(new PrefixFilter(Bytes.toBytes(x))) }

var scan = new Scan()  

scan.setFilter(filterList)
scan.addFamily(Bytes.toBytes("myCF"));

val rdd = hbaseContext.hbaseRDD(TableName.valueOf("tableName"), scan)
rdd.mapPartitions(populateCaseClass)

我不确定应该使用哪个过滤器来实现多行键前缀+每个行键的setLimit…

您需要自定义映射器来计算每个前缀匹配的次数。这方面没有标准。此外,FilterList的默认行为是必须通过所有,将其更改为必须通过任何添加到@AdamSkywalker comment,单个前缀可能跨越两个(甚至更多)区域-因此有多个spark分区-因此您必须有额外的步骤来过滤每个前缀的前N个结果。