val conf = HBaseConfiguration.create()
conf.addResource(new Path("/opt/cloudera/parcels/CDH-5.4.4-1.cdh5.4.4.p0.4/lib/hbase/conf/hbase-site.xml"))
conf.addResource(new Path("/opt/cloudera/parcels/CDH-5.4.4-1.cdh5.4.4.p0.4/lib/hadoop/etc/hadoop/core-site.xml"))
conf.set(TableInputFormat.INPUT_TABLE, "FLOW") //添加过滤条件,年龄大于 18 岁
//val scan = new Scan()
//conf.set(TableInputFormat.SCAN, convertScanToString(scan))
/*
scan.setFilter(new SingleColumnValueFilter("basic".getBytes, "age".getBytes,
CompareOp.GREATER_OR_EQUAL, Bytes.toBytes(18)))
*/ val usersRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
classOf[org.apache.hadoop.hbase.client.Result]) val data1 = usersRDD.count() val sf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss.SSSSS") println("data length:" + data1) var map = HashMap[String, HashMap[String, collection.mutable.ArrayBuffer[Double]]]() usersRDD.collect().map {
case (_, result) =>
val key = Bytes.toInt(result.getRow)
println("Key:" + key)
val ip = Bytes.toString(result.getValue("F".getBytes, "SADDR".getBytes))
val port = Bytes.toString(result.getValue("F".getBytes, "SPORT".getBytes))
val startTimeLong = Bytes.toString(result.getValue("F".getBytes, "STIME".getBytes))
val endTimeLong = Bytes.toString(result.getValue("F".getBytes, "LTIME".getBytes))
val protocol = Bytes.toString(result.getValue("F".getBytes, "PROTO".getBytes))
val sumTime = Bytes.toString(result.getValue("F".getBytes, "DUR".getBytes))
val sum = Bytes.toString(result.getValue("F".getBytes, "DBYTES".getBytes)).toDouble println("ip:" + ip + ",port:" + port + ",startTime:" + startTimeLong + ",endTime:" + endTimeLong + ",protocol:" + protocol + ",sum:" + sum) //ip+port+udp,14:02 14:07 List
//ip+port+tcp,15:02 15:07 List
val startTimeDate = sf.parse(startTimeLong)
val endTimeLongDate = sf.parse(endTimeLong)
val startHours = startTimeDate.getHours
val startMinutes = startTimeDate.getMinutes val endHours = endTimeLongDate.getHours
val endMinutes = endTimeLongDate.getMinutes val key1 = ip + "_" + port + "_" + protocol
println("key1:" + key1) val key2 = startHours + ":" + startMinutes + "_" + endHours + ":" + endMinutes println("key2:" + key2) val tmpMap = map.get(key1) if (!tmpMap.isEmpty) {
println("--------------------map is not null:" + tmpMap.size + "--------------------")
val sumArray = tmpMap.get.get(key2)
if (!sumArray.isEmpty) {
sumArray.get += sum
}
} else {
println("--------------------map is null--------------------")
//如果当前Key不存在的话,是一个全新的Ip
val sumArray = collection.mutable.ArrayBuffer[Double]()
sumArray += sum val secondMap = HashMap[String, collection.mutable.ArrayBuffer[Double]]()
secondMap += (key2 -> sumArray)
map += (key1 -> secondMap)
}
map
println("map size-----------------:" + map.size)
} println("map size:" + map.size) map.map(e => {
println("--------------------Statistics start --------------------")
val resultKey1 = e._1
val resultVal1 = e._2
println("resultKey1:" + resultKey1)
resultVal1.foreach(f => {
val resultKey2 = f._1
val resultVal2 = f._2
println("resultKey2:" + resultKey2)
println("-----------------resultVal2:" + resultVal2.length) resultVal2.map(f=>{
println("------------------------f:"+f)
}) val dataArray = resultVal2.map(f => Vectors.dense(f)) val summary: MultivariateStatisticalSummary = Statistics.colStats(sc.parallelize(dataArray)) //
println("--------------------mean:" + summary.mean + " --------------------")
println("--------------------variance:" + summary.variance + " --------------------") println("--------------------mean apply 0:" + summary.mean.toArray.apply(0) + " --------------------")
println("--------------------variance apply 0:" + summary.variance.apply(0) + " --------------------") val upbase = summary.mean.toArray.apply(0) + 1.960 * Math.sqrt(summary.variance.apply(0))
val downbase = summary.mean.toArray.apply(0) - 1.960 * Math.sqrt(summary.variance.apply(0))
println("------------------- " + upbase + " ---------- " + downbase)
val df = new DecimalFormat(".##")
val upbaseString = df.format(upbase)
val downbaseString = df.format(downbase)
//resultMap.put(key, value)
val result3 = HashMap[Double, Double]()
//result3 +=(upbase -> downbase)
println("ip port:" + resultKey1 + ",time:" + resultKey2 + ",upbase:" + upbase + ",downbase:" + downbase)
})
}) println("--------------------baseLine end --------------------")
sc.stop()

Spark读取Hbase的数据的更多相关文章

  1. 使用TableSnapshotInputFormat读取Hbase快照数据

    根据快照名称读取hbase快照中的数据,在网上查了好多资料,很少有资料能够给出清晰的方案,根据自己的摸索终于实现,现将代码贴出,希望能给大家有所帮助: public void read(org.apa ...

  2. Spark 读取HBase和SolrCloud数据

    Spark1.6.2读取SolrCloud 5.5.1 //httpmime-4.4.1.jar // solr-solrj-5.5.1.jar //spark-solr-2.2.2-20161007 ...

  3. Spark 读取HBase数据

    Spark1.6.2 读取 HBase 1.2.3 //hbase-common-1.2.3.jar //hbase-protocol-1.2.3.jar //hbase-server-1.2.3.j ...

  4. Spark读取Hbase中的数据

    大家可能都知道很熟悉Spark的两种常见的数据读取方式(存放到RDD中):(1).调用parallelize函数直接从集合中获取数据,并存入RDD中:Java版本如下: JavaRDD<Inte ...

  5. spark读取hbase形成RDD,存入hive或者spark_sql分析

    object SaprkReadHbase { var total:Int = 0 def main(args: Array[String]) { val spark = SparkSession . ...

  6. Spark读取结构化数据

    读取结构化数据 Spark可以从本地CSV,HDFS以及Hive读取结构化数据,直接解析为DataFrame,进行后续分析. 读取本地CSV 需要指定一些选项,比如留header,比如指定delimi ...

  7. spark读取hbase(NewHadoopAPI 例子)

    package cn.piesat.controller import java.text.{DecimalFormat, SimpleDateFormat}import java.utilimpor ...

  8. spark读取hbase数据

    def main(args: Array[String]): Unit = { val hConf = HBaseConfiguration.create(); hConf.set("hba ...

  9. Spark读取HBase

    背景:公司有些业务需求是存储在HBase上的,总是有业务人员找我要各种数据,所以想直接用Spark( shell) 加载到RDD进行计算 摘要: 1.相关环境 2.代码例子 内容 1.相关环境 Spa ...

随机推荐

  1. [Error] ld returned 1 exit status

    试试重启你的编译器,不稳定的编译器可能会有这种情况.当然不排除其他原因,若是重启了还不好使,就要看代码哪写错喽!!

  2. 编辑距离及其动态规划算法(Java代码)

    编辑距离概念描述 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.一般情况下编辑操作包括: 将一个字符替换成另一个字符: 插入一个字符: 删除一个字 ...

  3. C#基础——全局静态类中的静态类变量的设置

    前言 今天在设计一个系统用户管理界面的时候,出现了一个问题: 由于要在不同窗体之间传递数据,所以想到了要设置全局变量,比如一个用户有属性,ID,UserName,UserPwd和UserPower,为 ...

  4. ubuntu14 opencv python 安装

    本文记录了Ubuntu 14.04下使用源码手动安装OpenCV 3.0的过程.此外记录了在Python中安装及载入OpenCV的方法. 1.安装OpenCV所需的库(编译器.必须库.可选库) GCC ...

  5. git下载教程

    1.git for windows的下载链接 1.*的版本   https://github.com/msysgit/msysgit/releases 2.*的版本   https://github. ...

  6. CoreData数据库

        一  CoreData 了解 1 CoreData 数据持久化框架是 Cocoa API 的一部分,首先在iOSS5 版本的系统中出现:      它允许按照 实体-属性-值 模式组织数据: ...

  7. Longest Increasing Subsequence

    很久不写算法了== 写个东西练练手 最长上升子序列 输入n,然后是数组a[ ]的n个元素 输出最长上升子序列的长度 一.最简单的方法复杂度O(n * n) DP[ i ] 是以a[ i ] 为结尾的最 ...

  8. Vim找不到配色文件的解决方法

    Vim新出了8.0,又成功的勾起了我的好奇心. 重新从零开始配置,结果第一步设置配色主题就没过,好丢人-- 提示找不到evening.vim配色文件,于是上网查了一下,有说改环境变量的,又说改这个改那 ...

  9. JS中正则匹配的三个方法match exec test的用法

    javascript中正则匹配有3个方法,match,exec,test: match是字符串的一个方法,接收一个RegExp对象做为参数: match() 方法可在字符串内检索指定的值,或找到一个或 ...

  10. AJAX 的简单用法:

    AJAX 是一种在无需重新加载整个网页的情况下,能够更新部分网页的技术. AJAX 是一种用于创建快速动态网页的技术.通过在后台与服务器进行少量数据交换,AJAX 可以使网页实现异步更新.这意味着可以 ...