如何过滤Spark Hbase Rdd并获得结果?

时间:2014-12-16 09:53:24

标签: hbase apache-spark

我使用spark和hbase获取Rdd。现在我想过滤该rdd并从该Rdd获取特定值。我该如何处理?

这是我到目前为止所做的事情

val sc = new SparkContext(sparkConf)
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "tbl_date")
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[ImmutableBytesWritable],
classOf[Result])

现在我想使用该RDD(hBaseRDD)并通过向RDD发送特定参数来获取特定的列数据。我怎样才能做到这一点?

1 个答案:

答案 0 :(得分:0)

你已经拥有的东西:

val sc = new SparkContext(sparkConf)
val conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "tbl_date")
val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[ImmutableBytesWritable],
classOf[Result])

添加以下内容:

val localData = hbaseRDD.collect()  // This is array of Result
val filteredData = localData.map{ result =>
               result.getColumnCells("MyColFamily", "MyColName").get(0) // assuming you want first cell: otherwise
                                                       // you could also take all of them..
             }.filter{ cell => new String(cell.getValueArray()).startswtih("SomePrefix") }

以上显示了占位符/虚拟函数:

  • get(0)您需要决定是否只需要第一个细胞或所有细胞
  • new String(cell.getValueArray())您需要转换为正确的数据类型
  • .startsWith(..)您需要决定如何处理数据

但无论如何,上面给出了如何处理hbase单元数据的流程和概述。

相关问题