我们正在使用以下命令使用Pyspark读取Hbase表。
from pyspark.sql.types import *
host=<Host Name>
port=<Port Number>
keyConv = "org.apache.spark.examples.pythonconverters.ImmutableBytesWritableToStringConverter"
valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter"
cmdata_conf = {"hbase.zookeeper.property.clientPort":port, "hbase.zookeeper.quorum": host, "hbase.mapreduce.inputtable": "CMData", "hbase.mapreduce.scan.columns": "info:Tenure info:Age"}
cmdata_rdd = sc.newAPIHadoopRDD("org.apache.hadoop.hbase.mapreduce.TableInputFormat","org.apache.hadoop.hbase.io.ImmutableBytesWritable","org.apache.hadoop.hbase.client.Result",keyConverter=keyConv,valueConverter=valueConv,conf=cmdata_conf)
output = cmdata_rdd.collect()
output
我得到的结果如下。 (关键和年龄)
[(u'123', u'5'), (u'234', u'4'), (u'345', u'3'), (u'456', u'4'), (u'567', u'7'), (u'678', u'7'), (u'789', u'8')]
而是期待Key,Tenure和Age。如果我只有Tenure专栏,那么它将返回Key和Tenure。但是如果添加更多列,结果始终具有Key和Age列。
任何人都可以帮我们解决这个问题吗?
注意:我们是这个工具的新手
提前谢谢。
答案 0 :(得分:0)
我是您的原型设计并且不想更新您的群集,查看happybase(https://happybase.readthedocs.org/en/latest/)会很有用。
以下代码可以帮助我获得我的小型(9Gig)Hbase表&#39; name_Hbase_Table&#39;在一秒钟内从我的集群中。
import happybase
connection = happybase.Connection(host ='your.ip.cluster') #don't specify :port
table = connection.table('name_Hbase_Table')
def hbaseAccelerationParser(table): #create UDF to format data
finalTable=[]
for key, data in table.scan(): #don't need the key in my case
line=[]
for values in data.itervalues():
line.append(values)
finalTable.append(line)
return finalTable
table =table.map(hbaseAccelerationParser) #capture data in desired format
table = sc.parallelize(table ,4) #put in RDD