Методы чтения таблицы hbase с использованием spark scala - PullRequest
0 голосов
/ 30 августа 2018

Я использую метод каталога для чтения данных из hbase и сохранения их в фрейме данных, используя метод, описанный здесь Чтение таблицы HBase с помощью оператора where с использованием Spark , но мне интересно, есть ли другой эффективный путь к этому Постановка проблемы:

  1. scan hbase table_a
  2. scan hbase table_b (таблица сопоставления)
  3. проверить, присутствует ли значение col_1 в table_b, если да, получить parent_id из таблицы сопоставления
  4. если нет, то проверить col_2, присутствующий в table_b, если да, тогда получить parent_id из таблицы сопоставления
    1. сохранить результат в файл.

Я могу сделать это, используя метод выше, но, как я использую, как показано ниже выберите * из объединения b, где (случай, когда a.duns имеет значение null, а затем a.ig else a.duns end) = b.rowkey

это займет вечность

помогите пожалуйста

1 Ответ

0 голосов
/ 10 апреля 2019
import org.apache.hadoop.hbase.{HBaseConfiguration, 

HTableDescriptor,HColumnDescriptor,HConstants,TableName,CellUtil}

import org.apache.hadoop.hbase.client.{HBaseAdmin, 

Result,Put,HTable,ConnectionFactory,Connection,Get,Scan}

import org.apache.hadoop.hbase.io.ImmutableBytesWritable

import org.apache.hadoop.hbase.mapreduce.TableInputFormat

import org.apache.hadoop.hbase.util.Bytes


      val hconf = HBaseConfiguration.create()

      hconf.set("hbase.zookee per.quorum","localhost")

      hconf.set("hbase.zookeeper.property.clientPort","2181") 

      val admin = new HBaseAdmin(hconf)

      val hconn=ConnectionFactory.createConnection(hconf)

      var tabName_string= admin.getTableNames("student")(0)   // enter table name

      val table = new HTable(hconf,tabName_string)  // create table connection

      var data= table.get(new Get(Bytes.toBytes("row-id97")))   // row ID

      def getHBaseRowData (x: org.apache.hadoop.hbase.Cell, hint: Int )=  { 

      if(hint == 1){
                       ((Bytes.toString(x.getRow())), Bytes.toString(CellUtil.cloneQualifier(x)))

                    } else if(hint == 2) { 
                        ((Bytes.toString(x.getRow())),Bytes.toString(CellUtil.cloneValue(x))) 

                    } else if(hint == 3) { 
                        ((Bytes.toString(x.getRow())),Bytes.toString(CellUtil.cloneFamily(x))) 

                    } else if(hint == 4) { 
                    ((Bytes.toString(x.getRow())),(Bytes.toString(CellUtil.cloneQualifier(x))), (Bytes.toString(CellUtil.cloneFamily(x))), (Bytes.toString(CellUtil.cloneValue(x)))) 

                    } else 

                      ("Wrong Hint")

            }

       data.rawCells().foreach(x=> println(getHBaseRowData(x,4)))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...