如何使用Spark/Scala读取Hbase的数据

12 篇文章 0 订阅
2 篇文章 0 订阅

必须使用高亮参数启动Spark-shell,否则当你遍历RDD时会出现如下的Exception

java.io.NotSerializableException: org.apache.hadoop.hbase.io.ImmutableBytesWritable

 

spark-shell --conf spark.serializer=org.apache.spark.serializer.KryoSerializer

 

以下代码,经过MaprDB实测通过

import org.apache.spark._
import org.apache.spark.rdd.NewHadoopRDD
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor}
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.HColumnDescriptor
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.HTable;


val tableName = "/app/SubscriptionBillingPlatform/TRANSAC_ID"

val conf = HBaseConfiguration.create()

conf.set(TableInputFormat.INPUT_TABLE, tableName)


//create rdd
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], 
  classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
  classOf[org.apache.hadoop.hbase.client.Result])


hBaseRDD.take(2).map(row=>row._2.rawCells). 
                 map(_.map( kv => (new String(kv.getQualifier()) -> new String(kv.getValue()) ) ).toMap ).
                 foreach( map => { map.foreach{ entry => print(entry._1 +":" + entry._2 + ", ")  } ; print("\n-----------\n") }  )  
                 
//get the row count
val count = hBaseRDD.count()
print("HBase RDD count:"+count)
  

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值