【问题标题】:Reading Hbase table values in Scala using Spark RDD使用 Spark RDD 在 Scala 中读取 Hbase 表值
【发布时间】:2018-02-09 09:21:54
【问题描述】:

我们已经从 HBase 表创建了一个 SparkRDD,现在想要访问它的元素。以下是我们所做的:

  1. 已创建 RDD
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
println("hbase RDD:")
hBaseRDD.collect().foreach(println)
  1. hBaseRDD的o/p如下:
(31 30 31,keyvalues={100/f1:id/1518081262631/Put/vlen=3/seqid=0, 
100/f1:name/1518081278652/Put/vlen=3/seqid=0})
(31 30 31,keyvalues={101/f1:id/1518081307150/Put/vlen=3/seqid=0, 
101/f1:name/1518081291946/Put/vlen=3/seqid=0})
  1. HBase 表中的数据为:
 ROW                      COLUMN+CELL
 100                      column=f1:id, timestamp=1518081262631, value=100
 100                      column=f1:name, timestamp=1518081278652, value=abc
 101                      column=f1:id, timestamp=1518081307150, value=102
 101                      column=f1:name, timestamp=1518081291946, value=def

所以 Spark RDD 返回 HBase 表中实际数据的长度,而不是实际数据本身。如何从 HBase 表中获取实际数据?

【问题讨论】:

    标签: scala apache-spark hbase rdd


    【解决方案1】:

    当您收集 RDD 时,您将拥有一个 Array[Result]

    您可以将columnFamilycolumnName 作为参数传递给Result.getValue 方法以检索每一列的值:

    hBaseRDD.collect().foreach(r => {
      val columnValue = r.getValue(Bytes.toBytes(columnFamily), Bytes.toBytes(columnName))
    })
    

    【讨论】:

    • 请添加更多详细信息,说明为什么这是问题的答案
    • 添加了@JessBowers
    【解决方案2】:

    您正在做的是隐式调用ResulttoString 方法(代码为here),该方法又调用Cell 实现的toString 方法(很可能是KeyValue,其代码为here)。

    如您所见,toString 方法的实现不会打印该值,即使它存在。

    HBase 将所有内容都存储为原始字节,因此要漂亮地打印它们,您必须在结果上调用 value 方法,然后将其从 Array[Byte] 解码为您感兴趣的内容。

    def decodeValue(result: Result): Any = ???
    hBaseRDD.map(result => s"$result -> ${decodeValue(result)}").foreach(println)
    

    您必须根据您的架构实现decodeValue

    要获得有关如何解码您的值的一些灵感,您可以在source code of Eel 中查看他们如何解码 HBase 值。

    或者,您可以通过在单元格上调用value 方法来实现decodeValue 函数,然后漂亮地打印字节数组,从而直接打印原始形式的值。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-01-23
      • 1970-01-01
      • 2017-08-21
      • 2016-03-13
      • 2018-03-03
      • 2015-01-30
      • 1970-01-01
      • 2015-10-31
      相关资源
      最近更新 更多