阅读 Scala 中的 HBase - it.nerdammer

Read HBase in Scala - it.nerdammer

我想在 Spark 流代码中读取 HBase 数据,以查找和进一步增强流数据。我正在使用 spark-hbase-connector_2.10-1.0.3.jar

在我的代码中,以下行是成功的

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

docRdd.countreturns算对了。

docRdd 是类型

HBaseReaderBuilder(org.apache.spark.SparkContext@3a49e5,hbase_customer_profile,Some(data),WrappedArray(id, gender),None,None,List())

请问如何阅读 id, gender 列中的所有行。另外,如何将 docRdd 转换为数据框以便可以使用 SparkSQL。

您可以使用

读取RDD中的所有行
docRdd.collect().foreach(println)

要将 RDD 转换为 DataFrame,您可以定义一个案例 class:

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

我已将行键添加到案例中class;这不是绝对必要的,所以如果你不需要它,你可以省略它。

然后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))

然后 - 根据情况 class - 将 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)