我的任务是从Hbase读取一个表,并使用scala spark将其保存在HDFS路径中。
使用该输出路径,我们必须创建一个配置单元外部表。当我进行扫描但没有任何过滤器时,我的Hive表如下所示:
Columns | SampleRowKey | Count of columns
但是现在我们必须创建一个表,并在上面的表中添加一个新字段。 Hbase表中有一个限定词字段,称为“ M_TAX_YEAR”。我们已经检索了该字段,检查每列命中的所有年份以及特定列命中的那一年的计数。因此最终输出应如下所示:
Columns | SampleRowKey | Count of columns | Year
c1 | 10383883 | 3 | 2017 (28), 2018(16).
我在下面粘贴了我的执行部分。我需要有关如何进行计数以及如何汇总最终输出的帮助,如上所示。
请有人帮忙吗?
def processResult1(immBytes: ImmutableBytesWritable, result: Result): (String, List[String]) = {
def getCellName(cell: Cell): String = Bytes.toString(CellUtil.cloneQualifier(cell))
def getCellValue(cell: Cell): String = Bytes.toString(CellUtil.cloneValue(cell))
val kvPairs = result.rawCells.map(x => (getCellName(x), getCellValue(x))).toMap
val taxyr=kvPairs.getOrElse("M_TAX_YEAR","NF")
(Bytes.toString(immBytes.copyBytes)+"^"+taxyr, result.rawCells.toList.map(getCellName))
}
hbaseRdd.map(x => processResult(x._1, x._2)).flatMapValues(x => x).map(x => (x._2, (x._1, 1))).reduceByKey((x, y) => (x._1, x._2 + y._2)).map(x => s"${x._1},${x._2._1},${x._2._2},${x._3}").saveAsTextFile("/user/nx163561/HbaseProject/output")