我使用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发送特定参数来获取特定的列数据。我怎样才能做到这一点?
答案 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") }
以上显示了占位符/虚拟函数:
但无论如何,上面给出了如何处理hbase单元数据的流程和概述。