阅读 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.count
returns算对了。
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)
我想在 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.count
returns算对了。
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)