Python RDD只有第一列值:Hbase,PySpark

Python RDD只有第一列值:Hbase,PySpark,python,hadoop,hbase,bigdata,pyspark,Python,Hadoop,Hbase,Bigdata,Pyspark,我们正在使用以下命令读取带有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.python

我们正在使用以下命令读取带有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
相反,我期待的是钥匙、任期和年龄。若我只有任期列,那个么它将返回键和任期。但如果添加更多的列,结果总是有Key和Age列

谁能帮我们解决这个问题

注意:我们不熟悉此工具


提前感谢。

如果您正在进行原型设计,并且不想更新您的集群,那么查看happybase()可能会很有用

下面的代码实现了在不到一秒钟的时间内从集群中获取小型(9Gig)Hbase表“name_Hbase_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

如果您还有任何问题,请点击此示例可能会有帮助。谢谢您的回复,但当我单击该链接时,我只能看到一个空白页:(对不起,您需要git克隆它,或者您也可以使用。我在尝试从HBase查询多个列时遇到了相同的问题。我相信使用
valueConv=“org.apache.spark.examples.pythonconverters.hbaseresultostringconverter“
就是出错的地方。我们应该从HBase中获取一个列表/iterables作为值,但不知何故,只有这些Java iterables的最后一个条目被转换为python字符串。这应该是一个错误通知单。这真的有效吗?我在table=table.map(hbaseAccelerationParser)上收到一个错误#以所需格式捕获数据回溯(上次调用):文件“”,第1行,在AttributeError:“Table”对象中没有属性“map”
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