2016-08-02 2 views
1

Я хотел бы прочитать данные HBase в коде Spark stream для поиска и дальнейшего улучшения потоковых данных. Я использую spark-hbase-connector_2.10-1.0.3.jar.Читайте HBase в Scala - it.nerdammer

В моем коде следующая строка успешно

val docRdd = 
    sc.hbaseTable[(Option[String], Option[String])]("hbase_customer_profile") 
    .select("id","gender").inColumnFamily("data") 

docRdd.count возвращает правильный подсчет.

docRdd имеет тип

HBaseReaderBuilder (org.apache.spark.SparkContext @ 3a49e5, hbase_customer_profile, некоторые (данные), WrappedArray (идентификатор, пол), None, None, List())

Как я могу прочитать все строки в столбцах id, gender, пожалуйста. Также как я могу преобразовать docRdd в фрейм данных так, чтобы SparkSQL можно было использовать.

ответ

1

Вы можете прочитать все строки из RDD с помощью

docRdd.collect().foreach(println) 

Для преобразования RDD в DataFrame можно определить тематический класс:

case class Customer(rowKey: String, id: Option[String], gender: Option[String]) 

я добавил ключ строки к классу case; это не является строго необходимым, поэтому, если вам это не нужно, вы можете его опустить.

Тогда map над RDD:

// Row key, id, gender 
type Record = (String, Option[String], Option[String]) 

val rdd = 
    sc.hbaseTable[Record]("customers") 
    .select("id","gender") 
    .inColumnFamily("data") 
    .map(r => Customer(r._1, r._2, r._3)) 

, а затем - на основе класса случае - преобразовать RDD в DataFrame

import sqlContext.implicits._ 
val df = rdd.toDF() 
df.show() 
df.printSchema() 

Выход из spark-shell выглядит следующим образом:

scala> df.show() 
+---------+----+------+ 
| rowKey| id|gender| 
+---------+----+------+ 
|customer1| 1| null| 
|customer2|null|  f| 
|customer3| 3|  m| 
+---------+----+------+ 

scala> df.printSchema() 
root 
|-- rowKey: string (nullable = true) 
|-- id: string (nullable = true) 
|-- gender: string (nullable = true) 
+0

Спасибо @Beryllium. Я попробую это. Я хочу использовать RDD в SparkStream. Надеюсь, он тоже сериализуется. Еще раз спасибо за помощь –

+0

Вам нужна дополнительная помощь по этому вопросу? – Beryllium

+0

Я все установлен на этом. Спасибо.. –

Смежные вопросы