복붙노트

[HADOOP] RDD는 첫 번째 열 값만 갖습니다. Hbase, PySpark

HADOOP

RDD는 첫 번째 열 값만 갖습니다. Hbase, 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.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')]

대신 열쇠, 임기 및 나이를 기대하고 있습니다. Tenure 열만있는 경우 반환 키 및 Tenure입니다. 그러나 열을 더 추가하면 결과에 항상 키 및 연령 열이 있습니다.

누구든지 우리 가이 문제를 해결하도록 도울 수 있습니까?

참고 : 우리는이 도구를 처음 사용합니다.

미리 감사드립니다.

해결법

  1. ==============================

    1.프로토 타이핑 중이며 클러스터를 업데이트하지 않으려는 경우 happybase (https://happybase.readthedocs.org/en/latest/)를 살펴 보는 것이 좋습니다.

    프로토 타이핑 중이며 클러스터를 업데이트하지 않으려는 경우 happybase (https://happybase.readthedocs.org/en/latest/)를 살펴 보는 것이 좋습니다.

    다음 코드는 클러스터에서 작은 (9Gig) Hbase 테이블 'name_Hbase_Table'을 1 초 이내에 가져 오는 트릭을 수행합니다.

    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
    
  2. from https://stackoverflow.com/questions/31009988/rdd-is-having-only-first-column-value-hbase-pyspark by cc-by-sa and MIT license