这里是spark,hbase和scala的相对新手。 我在同一列系列的hbase单元格中有json(存储为字节数组),但是有几千个列限定符。示例(简化):
表名:'活动'
rowkey:rk1 专栏系列:cf1
列限定符:cq1,单元格数据(以字节为单位):{" id":1," event":" stand"}
列限定符:cq2,单元格数据(以字节为单位):{" id":2," event":" sit"}
等
使用scala,我可以通过指定时间范围来读取行
val scan = new Scan()
val start = 1460542400
val end = 1462801600
val hbaseContext = new HBaseContext(sc, conf)
val getRdd = hbaseContext.hbaseRDD(TableName.valueOf("Events"), scan)
如果我尝试将hbase rdd(getRdd)加载到数据帧中(在将字节数组转换为字符串等之后),它只读取每行中的第一个单元格(在上面的示例中,我只会得到& #34;站立"。
此代码仅为返回的每一行加载一个单元格
val resultsString = getRdd.map(s=>Bytes.toString(s._2.value()))
val resultsDf = sqlContext.read.json(resultsString)
为了获得每个单元格,我必须迭代如下。
val jsonRDD = getRdd.map(
row => {
val str = new StringBuilder
str.append("[")
val it = row._2.listCells().iterator()
while (it.hasNext) {
val cell = it.next()
val cellstring = Bytes.toString(CellUtil.cloneValue(cell))
str.append(cellstring)
if (it.hasNext()) {
str.append(",")
}
}
str.append("]")
str.toString()
}
)
val hbaseDataSet = sqlContext.read.json(jsonRDD)
我需要添加方括号和逗号,以便为数据帧正确格式化json以读取它。
问题:
谢谢