如何使用Scala Spark从Hbase读取表

时间:2019-02-07 11:08:57

标签: scala apache-spark hadoop

我的任务是从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")

0 个答案:

没有答案