我在努力创造 RDD
基于 HBase
表格:
val targetRDD = sparkContext.newAPIHadoopRDD(hBaseConfig,
classOf[TableInputFormat],
classOf[ImmutableBytesWritable],
classOf[Result])
.map {
case (key, row) => parse(key, row)
}
``` `parse` 为每个表行调用,而不考虑对数据的进一步操作。
是否可以仅检索具有与某些条件匹配的特定键(即,键在某个特定范围内)的行,以便仅对其进行操作?
1条答案
按热度按时间yftpprvb1#
hbase是一个键/值存储,其中的行按键排序,这意味着:
它可以有效地按键检索单行或按键范围检索行序列
在某些条件下检索随机行是无效的
所有检索操作归结为两个类:get和scan。这不难猜测它们是做什么的,除非指定stoprow/startrow,否则scan将遍历所有行。您也可以在扫描时设置过滤器,但它仍然需要迭代所有行,过滤器只是可以降低网络压力,因为hbase可能需要返回更少的行。
示例中的tableinputformat使用其内部的扫描来访问hbase:
此外,tableinputformat内部的createscanfromconfiguration方法可以提示您如何设置筛选器和键范围:
这个stackoverflow答案提供了一个如何设置扫描的例子
hbaseConfig
注意,尽管您不必设置scan,但您可以只设置特定的属性,如scan\u row\u start和other fromcreateScanFromConfiguration
我在上面提到过。