Hadoop 基于部分HBase行创建RDD
我正试图根据Hadoop 基于部分HBase行创建RDD,hadoop,apache-spark,hbase,Hadoop,Apache Spark,Hbase,我正试图根据HBase表中的数据创建RDD: val targetRDD = sparkContext.newAPIHadoopRDD(hBaseConfig, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result]) .map { case (key, row) => parse(key, row) } 对每个表行调用parse,而不考虑对数据进行进一步的操作 是
HBase
表中的数据创建RDD
:
val targetRDD = sparkContext.newAPIHadoopRDD(hBaseConfig,
classOf[TableInputFormat],
classOf[ImmutableBytesWritable],
classOf[Result])
.map {
case (key, row) => parse(key, row)
}
对每个表行调用parse
,而不考虑对数据进行进一步的操作
是否可以仅检索具有与某些条件匹配的特定键的行(即键在某些特定范围内),以便仅对其进行操作?HBase是一个键/值存储,其中的行按键排序,这意味着:
- 它在按键检索单行或按键范围检索行序列时非常有效
- 在某些条件下检索随机行是无效的
public void setConf(配置){
this.conf=配置;
扫描=空;
如果(conf.get(SCAN)!=null){
试一试{
scan=TableMapReduceUtil.convertStringToScan(conf.get(scan));
}捕获(IOE异常){
LOG.error(“发生错误”,e);
}
}否则{
试一试{
scan=createScanFromConfiguration(conf);
}捕获(例外e){
LOG.error(StringUtils.stringifyException(e));
}
}
设置扫描;
}
中的方法还可以提示您如何设置过滤器和键范围:
公共静态扫描createScanFromConfiguration(配置配置)引发IOException{
扫描=新扫描();
if(conf.get(扫描行开始)!=null){
scan.setStartRow(Bytes.tobytes二进制(conf.get(scan_ROW_START));
}
如果(conf.get(扫描行停止)!=null){
scan.setStopRow(Bytes.tobytes二进制(conf.get(scan_ROW_STOP));
}
if(conf.get(扫描列)!=null){
addColumns(scan,conf.get(scan_COLUMNS));
}
if(conf.get(扫描列族)!=null){
scan.addFamily(Bytes.toBytes(conf.get(scan_COLUMN_FAMILY));
}
if(conf.get(扫描时间戳)!=null){
setTimeStamp(Long.parseLong(conf.get(scan_TIMESTAMP));
}
if(conf.get(SCAN\u TIMERANGE\u START)!=null和&conf.get(SCAN\u TIMERANGE\u END)!=null){
scan.setTimeRange(
parseLong(conf.get(SCAN\u TIMERANGE\u START)),
parseLong(conf.get(SCAN_TIMERANGE_END));
}
if(conf.get(SCAN_MAXVERSIONS)!=null){
setMaxVersions(Integer.parseInt(conf.get(scan_MAXVERSIONS));
}
if(conf.get(SCAN_CACHEDROWS)!=null){
setCaching(Integer.parseInt(conf.get(scan_CACHEDROWS));
}
if(conf.get(SCAN\u BATCHSIZE)!=null){
setBatch(Integer.parseInt(conf.get(scan_BATCHSIZE));
}
//默认情况下为false,全表扫描会产生太多BC搅动
setCacheBlocks((conf.getBoolean(scan_CACHEBLOCKS,false));
返回扫描;
}
此stackoverflow提供了一个如何在
hbaseConfig
上设置扫描的示例,请注意,尽管您不必设置扫描,但您可以从上面提到的createScanFromConfiguration
设置特定属性,如Scan\u ROW\u START和其他属性。谢谢,我来试试。设置SCAN\u ROW\u START
的方式适合我。请使答案更简洁。您可能需要签出,并且,这两个选项都可以轻松地使用筛选器加载hbase表conditions@Shankar是的,我看了《凤凰星火》,谢谢。