spark 省份次数统计实例
//统计access.log文件里面IP地址对应的省份,并把结果存入到mysql package access1 import java.sql.DriverManager import org.apache.spark.broadcast.Broadcast
import org.apache.spark.{SparkConf, SparkContext} object AccessIp {
def main(args: Array[String]): Unit = {
//new sc
val conf = new SparkConf ()
.setAppName ( this.getClass.getSimpleName )
.setMaster ( "local[*]" )
val sc = new SparkContext ( conf ) //读取数据
val accesslines = sc.textFile ( "D:\\学习笔记\\资料汇总\\day02\\资料\\省份次数统计的数据\\access.log" )
val iplines = sc.textFile ( "D:\\学习笔记\\资料汇总\\day02\\资料\\省份次数统计的数据\\ip.txt" ) //处理数据
val ip1 = iplines.map ( tp => {
val splits = tp.split ( "[|]" )
val start = splits ( ).toLong
val end = splits ( ).toLong
val province = splits ( )
(start, end, province)
} ).collect () //广播变量(这里使用是不对,当数据使用三次的时候,在使用广播变量,否则会占内存)
val broads: Broadcast[Array[(Long, Long, String)]] = sc.broadcast ( ip1 ) //处理数据
val result2 = accesslines.map ( tp => {
val splits = tp.split ( "[|]" )
val ip = splits ( )
val ips = MyUtils.ip2Long ( ip )
val valiues: Array[(Long, Long, String)] = broads.value
val index = MyUtils.binarSearch ( valiues, ips )
var province = "" if (index != -) {
province = valiues ( index )._3
}
(province, )
} ).reduceByKey ( _ + _ ).sortBy ( -_._2 ) //写入mysql
result2.foreachPartition ( filter => {
//获取mysql的链接
val connection = DriverManager.getConnection ( "jdbc:mysql://localhost:3306/test1?characterEncoding=UTF-8&serverTimezone=GMT%2B8", "root", "" )
filter.foreach ( tp => {
val ps = connection.prepareStatement ( "insert into suibian values(?,?)" ) //设置参数
ps.setString ( , tp._1 )
ps.setInt ( , tp._2 ) //提交
ps.executeLargeUpdate ()
ps.close ()
} )
connection.close ()
} )
sc.stop ()
broads.unpersist ( true )
}
}
package access1
object MyUtils {
//ip地址转换为lang类型
def ip2Long(ip: String): Long = {
val fragments = ip.split ( "[.]" )
var ipNum = 0L
for (i <- until fragments.length) {
ipNum = fragments ( i ).toLong | ipNum << 8L
}
ipNum
}
//二分查找法
def binarSearch(array: Array[(Long, Long, String)], target: Long): Int = {
var low =
var high = array.length -
while (low <= high) {
var mid = low + ( high - low ) /
if (array ( mid )._1 <= target && array ( mid )._2 >= target) {
return mid
} else if (array ( mid )._1 > target) {
high = mid -
} else {
low = mid +
}
}
return -
}
}
spark 省份次数统计实例的更多相关文章
- spark之scala程序开发(集群运行模式):单词出现次数统计
准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...
- QQ群成员发言次数统计(词云制作)
所用数据来自于之前的一篇博客: <QQ群成员发言次数统计(正则表达式版)> 链接:http://www.cnblogs.com/liyongzhao/p/3324026.html 1.首先 ...
- Python OOP(3) staticmethod和classmethod统计实例
staticmethod 统计实例 #!python2 #-*- coding:utf-8 -*- class c1: amount_instance=0 def __init__(self): c1 ...
- 【JAVA系列】使用JavaScript实现网站访问次数统计代码
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[JAVA系列]使用JavaScript实现网站 ...
- spark之scala程序开发(本地运行模式):单词出现次数统计
准备工作: 将运行Scala-Eclipse的机器节点(CloudDeskTop)内存调整至4G,因为需要在该节点上跑本地(local)Spark程序,本地Spark程序会启动Worker进程耗用大量 ...
- Spark Streaming 002 统计单词的例子
1.准备 事先在hdfs上创建两个目录: 保存上传数据的目录:hdfs://alamps:9000/library/SparkStreaming/data checkpoint的目录:hdfs://a ...
- jsp网站访问次数统计
JSP 点击量统计 有时候我们需要知道某个页面被访问的次数,这时我们就需要在页面上添加页面统计器,页面访问的统计一般在用户第一次载入时累加该页面的访问数上. 要实现一个计数器,您可以利用应用程序隐式对 ...
- 使用Python统计深圳市公租房申请人省份年龄统计
使用Python,HtmlParser来统计深圳市保障房申请人的原籍省份分布,年龄分布等.从侧面可以反映鹏城人的地域分布.以下python代码增大了每一次获取的记录数,从而少提交几次请求.如果按照WE ...
- Spark MLib 基本统计汇总 2
4. 假设检验 基础回顾: 假设检验,用于判断一个结果是否在统计上是显著的.这个结果是否有机会发生. 显著性检验 原假设与备择假设 常把一个要检验的假设记作 H0,称为原假设(或零假设) (null ...
随机推荐
- HDU2604【矩阵快速幂】
思路: 把fm看成01,f-1,m-0: 不能存在101,111; dp[i]代表第i结尾的方案数: ①:结尾是0一定行:只要i-1序列里添个0就好了,dp[i]+=dp[i-1]: ②:结尾是1 ...
- Lightoj1000【简单A+B】
balababalabalabala! #include<stdio.h> #include<queue> #include<string.h> #include& ...
- 学习Mahout(二)
继续上一篇博客. 这篇博客介绍如何跑一下mahout自带的Hello world程序 我将mahout 安装在/opt/hadoop/mahout-distribution-0.9 cd /opt/h ...
- ZOJ 4033 CONTINUE...?(The 15th Zhejiang Provincial Collegiate Programming Contest Sponsored by TuSimple)
#include <iostream> #include <algorithm> using namespace std; ; int a[maxn]; int main(){ ...
- 51Nod 1873 初中的算术
大神的字符串快速幂 #include <iostream> #include <string> #include <algorithm> #include < ...
- 18002 Z-Scan 模拟题
18002 Z-Scan 时间限制:1000MS 内存限制:65535K提交次数:0 通过次数:0 题型: 编程题 语言: 不限定 Description Z-Scan is a method ...
- js实现对象或者数组深拷贝
今天遇到个问题,就是vue绑定的数组在push中所有的数组都会跟着改变.这个主要是因为 JavaScript中对象或者数组等引用类型,直接拷贝,改变一个另外一个也会改变: 有个简单的方法就是先转换为字 ...
- 实战:mysql写存储过程并定时调用
有表:cap_meter_detail 字段:recordtime 情景:recordtime每半个小时记录一次,故一天会产生很很多数据,我们要做的是,每天00:00:00对cap_meter_det ...
- I/O————字节流
InputStream字节输入流 OutputStream字节输出流 用于以字节的形式读取和写入数据 下面是使用 字节输入流读取文件字节输出流写入文件 文件可能不存在,所以使用try catch pu ...
- zuul filter
前言 过滤器是Zuul的核心组件,这篇文章我们来详细讨论Zuul的过滤器.下面话不多说,来看看详细的介绍吧. 过滤器类型与请求生命周期 Zuul大部分功能都是通过过滤器来实现的.Zuul中定义了四种标 ...