在用PySpark操作HBase时默认是scan操作,通常情况下我们希望加上rowkey指定范围,即只获取一部分数据参加运算。翻遍了spark的python相关文档,搜遍了googlestackoverflow也没有具体的解决方案。既然java和scala都支持,python肯定也支持的。

翻了一下hbase源码

org.apache.hadoop.hbase.mapreduce.TableInputFormat

setConf方法里原来是根据特定的字符串对scan进行配置,那么在Python里对conf就可以进行相应的设置,这些设置主要包括:

hbase.mapreduce.scan.row.start
hbase.mapreduce.scan.row.stop
hbase.mapreduce.scan.column.family
hbase.mapreduce.scan.columns
hbase.mapreduce.scan.timestamp
hbase.mapreduce.scan.timerange.start
hbase.mapreduce.scan.timerange.end
hbase.mapreduce.scan.maxversions
hbase.mapreduce.scan.cacheblocks
hbase.mapreduce.scan.cachedrows
hbase.mapreduce.scan.batchsize

首先创建测试表

hbase> create 'test', 'f1'
hbase> put 'test', 'row1', 'f1', 'value1'
hbase> put 'test', 'row2', 'f1', 'value2'
hbase> put 'test', 'row3', 'f1', 'value3'
hbase> put 'test', 'row4', 'f1', 'value4'

  

然后,设置scan范围的示例代码如下

sc = SparkContext(appName=settings.APP_NAME)
conf = {
"hbase.zookeeper.quorum": settings.HBASE_HOST,
"hbase.mapreduce.inputtable": "test",
"hbase.mapreduce.scan.row.start": "row2"
}
rdd = sc.newAPIHadoopRDD(
"org.apache.hadoop.hbase.mapreduce.TableInputFormat",
"org.apache.hadoop.hbase.io.ImmutableBytesWritable",
"org.apache.hadoop.hbase.client.Result",
keyConverter="org.valux.converters.ImmutableBytesWritableToStringConverter",
valueConverter="org.valux.converters.HBaseResultToStringConverter",
conf=conf)
result = rdd.collect()
for (k, v) in result
print k, v

org.valux.converters.ImmutableBytesWritableToStringConverterorg.valux.converters.HBaseResultToStringConverter 是我自己实现的两个转换类,也可以用spark默认自带的converter,具体可以参考hbase_inputformat.py,不过提交时请带上相应的jar包

 

最新文章

  1. JVM虚拟机结构
  2. DOM事件
  3. EXCEL文件格式不匹配,或者已经损坏,除非信任来源
  4. android 项目学习随笔十五(ShareSDK开放平台)
  5. 新手学vim配置
  6. The test form is only available for requests from the local machine 解决方法
  7. C++从多n个数中选取m个数的组合
  8. Readonly and other things about C++
  9. 完美解决夏天电脑cpu发烫问题
  10. Activiti工作流学习笔记
  11. 一条SQL语句在MySQL中如何执行的
  12. C#.NET接收JSON数组
  13. C语言第九讲,结构体
  14. CVE-2017-5123 分析报告
  15. 利用Solr服务建立的站内搜索雏形
  16. PHP之后期静态绑定
  17. 表结构中updated_time设计为ON UPDATE CURRENT_TIMESTAMP时,使用过程的一个坑
  18. 留言板0.4_model中的数据库(1)
  19. git命令(9): 常见问题cover
  20. Python - 连接msql数据库

热门文章

  1. sysfs实例
  2. HDU 4744 Starloop System(ZKW费用流)
  3. WCF中配置文件解析
  4. HeadFirst Jsp 07 (使用 jsp)
  5. Machine Learning for hackers读书笔记(四)排序:智能收件箱
  6. [Swift系列]003- 函数
  7. python - 简明 性能测试
  8. Linux Shell编程(4): 逻辑运算符、逻辑表达式详解
  9. UVa11582 Colossal Fibonacci Numbers!
  10. 初步认识mongodb文件