RDD имеет только значение первого столбца: Hbase, PySpark

Мы читаем таблицу Hbase с помощью Pyspark, используя следующие команды.

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.

Может ли кто-нибудь помочь нам решить эту проблему.?

Примечание. Мы новички в этом инструменте.

Заранее спасибо.


person classic_vmk    schedule 23.06.2015    source источник
comment
этот пример может быть полезен. больше вопросов   -  person Anant    schedule 24.06.2015
comment
Привет, Анант, спасибо за ответ, но когда я нажимаю на эту ссылку, я вижу только пустую страницу :(   -  person classic_vmk    schedule 24.06.2015
comment
Извините, вам нужно клонировать его с помощью git, или вы также можете использовать gist.github.com/anantasty/2353b5da5099e24da111   -  person Anant    schedule 24.06.2015
comment
У меня возникла та же проблема, когда я попытался запросить более одного столбца из HBase. Я считаю, что использование valueConv = "org.apache.spark.examples.pythonconverters.HBaseResultToStringConverter" пошло не так. Мы должны получить список/итерации в качестве значений из HBase, но каким-то образом только последняя запись этих итераций Java преобразуется в строку python. Это должно быть сообщение об ошибке.   -  person XValidated    schedule 31.07.2015


Ответы (1)


Если вы создаете прототип и не хотите обновлять свой кластер, может быть полезно взглянуть на happybase (https://happybase.readthedocs.org/en/latest/).

Следующий код помогает получить мою небольшую (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
person Casneuf    schedule 22.02.2016
comment
Это действительно работает? Я получаю сообщение об ошибке в таблице =table.map(hbaseAccelerationParser) #захват данных в нужном формате. Трассировка (последний последний вызов): Файл ‹stdin›, строка 1, в ‹module› AttributeError: объект «Таблица» не имеет атрибута ' карта' - person Mohan; 25.05.2016