rdd只有第一列值:hbase、pyspark

7xzttuei  于 2021-05-30  发布在  Hadoop
关注(0)|答案(1)|浏览(352)

我们使用以下命令读取带有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和age列。
有人能帮我们解决这个问题吗。?
注意:我们不熟悉这个工具
先谢谢你。

w1jd8yoj

w1jd8yoj1#

如果您正在进行原型设计,并且不想更新集群,那么查看happybase会很有用(https://happybase.readthedocs.org/en/latest/).
下面的代码实现了在不到一秒钟的时间内从集群中获取小型(9gig)hbase表'name\u hbase\u table'的技巧。

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

相关问题