spark 读取hbase数据并转化为dataFrame

最近两天研究spark直接读取hbase数据,并将其转化为dataframe。之所以这么做,

1、公司的数据主要存储在hbase之中

2、使用dataframe,更容易实现计算。

 

尽管hbase的官方已经提供了hbase-spark 接口,但是并未对外发布,而且目前的项目又有这方面的需求,且网上关于这么方面的参考比较少,

 

故贴出来,代码如下,仅供参考

 

 

 

 

import org.apache.hadoop.hbase.client._
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.{TableName, HBaseConfiguration}
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.sql.SQLContext
import org.apache.spark.{SparkContext, SparkConf}

/**
  * Created by seagle on 6/28/16.
  */
object HBaseSpark {
  def main(args:Array[String]): Unit ={

    // 本地模式运行,便于测试
val sparkConf = new SparkConf().setMaster("local").setAppName("HBaseTest")

    // 创建hbase configuration
val hBaseConf = HBaseConfiguration.create()
    hBaseConf.set(TableInputFormat.INPUT_TABLE,"bmp_ali_customer")

    // 创建 spark context
val sc = new SparkContext(sparkConf)
    val sqlContext = new SQLContext(sc)
    import sqlContext.implicits._

    // 从数据源获取数据
val hbaseRDD = sc.newAPIHadoopRDD(hBaseConf,classOf[TableInputFormat],classOf[ImmutableBytesWritable],classOf[Result])

    // 将数据映射为表  也就是将 RDD转化为 dataframe schema
val shop = hbaseRDD.map(r=>(
      Bytes.toString(r._2.getValue(Bytes.toBytes("info"),Bytes.toBytes("customer_id"))),
      Bytes.toString(r._2.getValue(Bytes.toBytes("info"),Bytes.toBytes("create_id")))
      )).toDF("customer_id","create_id")

    shop.registerTempTable("shop")

    // 测试
val df2 = sqlContext.sql("SELECT customer_id FROM shop")

    df2.foreach(println)
  }

}
 
           
 
           
代码能够运行的前提是
1、 引用了 spark-sql  jar
2、配置了Hbase-site.xml ,并将其放在工程的根目录下

 

 

作者:明翼(XGogo) 
出处:http://www.cnblogs.com/seaspring/ 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。 
不能用于商业用户,若商业使用请联系: 
------------- 
QQ:107463366 
微信:shinelife 
-------------

分类:  spark
好文要顶  关注我  收藏该文   
XGogo
关注 - 2
粉丝 - 20
+加关注
0
0
« 上一篇: spark结构化数据处理:Spark SQL、DataFrame和Dataset
» 下一篇: Spark操作Hbase
posted @  2016-09-07 22:06  XGogo 阅读( 2224) 评论( 2)   编辑  收藏

  
#1楼   2016-11-03 12:56  顾浅辞   
请问运行的时候报错:
java.lang.ClassNotFoundException: hbase
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:348)
at org.apache.spark.util.Utils$.classForName(Utils.scala:174)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:689)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:181)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:206)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:121)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
这是哪里除了问题?谢谢
支持(0) 反对(0)
  
#2楼 [ 楼主2017-03-19 21:34  XGogo   
@ 顾浅辞
少jar包
支持(0) 反对(0)
刷新评论 刷新页面 返回顶部
【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【推荐】腾讯云域名+云解析 限时折扣抓紧抢购
【推荐】可嵌入您系统的“在线Excel”!SpreadJS 纯前端表格控件
【推荐】阿里云“全民云计算”优惠升级
最新IT新闻:
·  斯坦福大学研发无需用电的系统 将热量散发到太空来降低冷却成本
·  阿里18周年举办史上最壕年会
·  “饿了么”等三大外卖平台被诉破坏环境 法院已立案
·  “A站”因违法违规被罚12万元 相关频道已关闭
·  柳传志:33年来,联想这13条管理经验从未改变
»  更多新闻...
spark 读取hbase数据并转化为dataFrame_第1张图片
最新知识库文章:
·  做到这一点,你也可以成为优秀的程序员
·  写给立志做码农的大学生
·  架构腐化之谜
·  学会思考,而不只是编程
·  编写Shell脚本的最佳实践
»  更多知识库文章...

你可能感兴趣的:(spark 读取hbase数据并转化为dataFrame)