作者:Syn良子 出处:http://www.cnblogs.com/cssdongl/p/7449682.html 转载请注明出处

最近在折腾pyspark的HbaseConverters,由于资料太少折腾了好一会儿才明白,特此分享给大家.


问题背景

最近在使用pyspark写hbase的过程中发现,会报以下类似的错误

这是由于最终计算结果存入hbase的时候pyspark无法找到相关的converter造成的.啥?你问为啥要找converter,这是因为Java和Scala都可以支持组装Hbase的Put然后存入Hbase,但是Python这块儿spark API是后妈生的,暂时还不能直接支持,所以需要转换.

问题详解

这个HBaseConverters模块位于spark-examples*.jar包下,据我挨个检查,spark1.4和spark1.6都有这个模块,而spark.2.x已经没有了,但是spark2.x上我测试了可以使用1.6的spark-examples_2.10-1.6.3.jar中的HBaseConverters来读写Hbase,完全没有问题.而Spark1.4和Spark1.6的HBaseConverters我推荐用后者,理由如下.

Spark1.4的HBaseConverters模块

这是一个scala文件,里面有4个class,细心观察的同学会发现,上面2个是读取Hbase用,下面2个是写入用,它们都继承了

org.apache.spark.api.python.Converter类,这个是pyspark的API,最终会调用四个子类来进行相应的读写.

Spark1.6的HBaseConverters模块

恩,仔细观察2个截图中的代码,唯一的区别在于第一个HBaseResultToStringConverter这个读取Hbase的Result转换类.

对,我想强调的就是这个转换类。Spark1.4的这个转换类仔细看代码

class HBaseResultToStringConverter extends Converter[Any, String] {

override def convert(obj: Any): String = {

val result = obj.asInstanceOf[Result]

Bytes.toStringBinary(result.value())

}

}

这个读取hbase的转换类得到Result后,最终返回的只是result.value()也就是列值.

然后观察spark1.6的这个转换类

class HBaseResultToStringConverter extends Converter[Any, String] {

override def convert(obj: Any): String = {

val result = obj.asInstanceOf[Result]

val output = result.listCells.asScala.map(cell =>

Map(

"row" -> Bytes.toStringBinary(CellUtil.cloneRow(cell)),

"columnFamily" -> Bytes.toStringBinary(CellUtil.cloneFamily(cell)),

"qualifier" -> Bytes.toStringBinary(CellUtil.cloneQualifier(cell)),

"timestamp" -> cell.getTimestamp.toString,

"type" -> Type.codeToType(cell.getTypeByte).toString,

"value" -> Bytes.toStringBinary(CellUtil.cloneValue(cell))

)

)

output.map(JSONObject(_).toString()).mkString("\n")

}

}

恩,注意中间的Map部,这个转换类首先将Result的各个部分读取出来(不止是value)封装成map,然后转换成Json字符串返回.

区别很明显了,明显1.6这个转换类更详细,我们能从中得到更多的内容.

问题总结

理解了上述HbaseConverters的本质以后,我们就能愉快的利用pyspark来快速读写hbase,要点如下

  • pyspark读取hbase时,定义好keyconverter和valueconverter及hbaseconf很关键,不会配置的可以参考我上篇文章
  • pyspark写入hbase时,同上定义好这几个配置,而最终需要保存到hbase的rdd,需要构造为(tablename,[rowkey,column_fm,columnname,columnvalue])这种元组字符串的格式,然后才可以成功的保存到hbase.
  • pyspark的HbaeConverters所在jar包需要加入spark的classpath中去(或者spark-submmit提交时跟参数--jars将具体jar包include进去),可以参考我上篇文章最后的spark classpath配置.

本来想直接贴调试过的代码的,但是总觉得MarkDown格式的代码引用格式不好用,还是直接截图吧,大家感受下就好

Pyspark的HBaseConverters详解的更多相关文章

  1. HUE配置文件hue.ini 的Spark模块详解(图文详解)(分HA集群和HA集群)

    不多说,直接上干货! 我的集群机器情况是 bigdatamaster(192.168.80.10).bigdataslave1(192.168.80.11)和bigdataslave2(192.168 ...

  2. Hue的全局配置文件hue.ini(图文详解)

    Hue版本:hue-3.9.0-cdh5.5.4 需要编译才能使用(联网) 说给大家的话:大家电脑的配置好的话,一定要安装cloudera manager.毕竟是一家人的.同时,我也亲身经历过,会有部 ...

  3. Linq之旅:Linq入门详解(Linq to Objects)

    示例代码下载:Linq之旅:Linq入门详解(Linq to Objects) 本博文详细介绍 .NET 3.5 中引入的重要功能:Language Integrated Query(LINQ,语言集 ...

  4. 架构设计:远程调用服务架构设计及zookeeper技术详解(下篇)

    一.下篇开头的废话 终于开写下篇了,这也是我写远程调用框架的第三篇文章,前两篇都被博客园作为[编辑推荐]的文章,很兴奋哦,嘿嘿~~~~,本人是个很臭美的人,一定得要截图为证: 今天是2014年的第一天 ...

  5. EntityFramework Core 1.1 Add、Attach、Update、Remove方法如何高效使用详解

    前言 我比较喜欢安静,大概和我喜欢研究和琢磨技术原因相关吧,刚好到了元旦节,这几天可以好好学习下EF Core,同时在项目当中用到EF Core,借此机会给予比较深入的理解,这里我们只讲解和EF 6. ...

  6. Java 字符串格式化详解

    Java 字符串格式化详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 文中如有纰漏,欢迎大家留言指出. 在 Java 的 String 类中,可以使用 format() 方法 ...

  7. Android Notification 详解(一)——基本操作

    Android Notification 详解(一)--基本操作 版权声明:本文为博主原创文章,未经博主允许不得转载. 微博:厉圣杰 源码:AndroidDemo/Notification 文中如有纰 ...

  8. Android Notification 详解——基本操作

    Android Notification 详解 版权声明:本文为博主原创文章,未经博主允许不得转载. 前几天项目中有用到 Android 通知相关的内容,索性把 Android Notificatio ...

  9. Git初探--笔记整理和Git命令详解

    几个重要的概念 首先先明确几个概念: WorkPlace : 工作区 Index: 暂存区 Repository: 本地仓库/版本库 Remote: 远程仓库 当在Remote(如Github)上面c ...

随机推荐

  1. css动画属性--轮播图效果

    通过css的动画属性实现轮播图的显示效果 代码如下: 主体部分: <div id="move"> <ul> <li><img src=&q ...

  2. background:rgba() 兼容ie8 用法

    background: rgba(255,255,255,.1);//火狐,谷歌等 filter:progid:DXImageTransform.Microsoft.gradient(startCol ...

  3. PHP安装sqlsrv扩展步骤,PHP如何连接上SQL

    今天捣鼓了一天,终于把PHP的sqlsrc扩展给弄好了.为了让PHP能够顺利连接上MSSQL,实在不易. 第一步:安装Wampserver 我安装的是Wampserver 2.4.17版本.注意:安装 ...

  4. tensorflow softplus应用

    1.softplus函数表达式 图像: 2.tensorflow 举例 import tensorflow as tf input=tf.constant([0,1,2,3],dtype=tf.flo ...

  5. 使用Visual Studio加断点调试Unity游戏的C#代码

    1.安装Unity5.2.5 2.安装Microsoft Visual Studio 2013 3.打开VS2013,点击Tools | Extensions and Updates,然后在这个界面点 ...

  6. hive配置过程中出现的一个问题

    执行hive里面的insert语句的时候,报错,执行失败查看hadoop的日志文件之后发现错误的详细信息如下: 把hdfs-site.xml中的hadoop.tmp.dir这个属性添加到core-si ...

  7. C#中的数据类型转换

    数据类型在一定的条件下是可以相互转换的,如将int型数据转换成double型数据.C#允许使用两种转换方式:隐式转换和显式转换. 1.隐式转换 隐式转换:从类型A到类型B的转换可以在所有情况下进行,执 ...

  8. Cubieboard Linaro 搭建超节能监控平台

    转载的,不知道原作者是谁.list很好,但我没有全部测试和验证,部分内容或已失效,如有人找到原作者的更新或者最新的心得.请告知. Cubieboard是一款ARM架构的开发板, 1GHz 的 All ...

  9. 度度熊与邪恶大魔王 DP | 完全背包

    Problem Description 度度熊为了拯救可爱的公主,于是与邪恶大魔王战斗起来. 邪恶大魔王的麾下有n个怪兽,每个怪兽有a[i]的生命值,以及b[i]的防御力. 度度熊一共拥有m种攻击方式 ...

  10. .NET Core 2.0和ASP.NET Core 2.0正式版抢先体验

    .NET Core 2.0和ASP.NET Core 2.0正式版抢先体验 .NET Standard 2.0 is final Broad platform support. .NET Standa ...