【机器学习之二】python开发spark案例
环境
spark-1.6
python3.5
一、wordcount
# -*- coding:utf-8 -*-
'''
Created on 2019年5月13日 @author: Administrator
''' #从pyspark中导入相应的包
from pyspark import SparkConf
from pyspark import SparkContext def show(x):
print(x) if __name__ == '__main__':
#创建SparkConf
conf = SparkConf().setAppName("wordcount").setMaster("local")
#创建SparkContext 注意参数要传递conf=conf
sc = SparkContext(conf=conf)
#设置日志级别
sc.setLogLevel("WARN")
#使用2个分区读取数据 一行行的数据
lines = sc.textFile("../../data/words", 2)
print("lines rdd partition length = %d"%(lines.getNumPartitions()))
#每一行数据按照空格拆分 得到一个个单词
words = lines.flatMap(lambda line:line.split(" "), True)
#将每个单词 组装成一个tuple 计数1
pairWords = words.map(lambda word : (word,1),True)
#使用3个分区 reduceByKey进行汇总
result = pairWords.reduceByKey(lambda v1,v2:v1+v2, 3)
print("result rdd partition length = %d"%(result.getNumPartitions()))
#打印结果
result.foreach(lambda t :show(t))
#将结果保存到文件
result.saveAsTextFile("../../data/wc-result")
#关闭
sc.stop()
二、PVUV
# -*- coding:utf-8 -*-
'''
Created on 2019年5月16日 @author: Administrator
'''
# import sys
from pyspark.conf import SparkConf
from pyspark.context import SparkContext
from builtins import sorted # print(sys.getdefaultencoding())
# reload(sys)
# sys.setdefaultencoding('utf-8')
# print(sys.getdefaultencoding()) #打印结果
def showresult(em):
print(em) #数据样例
#7.213.213.208 吉林 2018-03-29 1522294977303 1920936170939152672 www.dangdang.com Login #页面访问量
def pv(lines):
sitepair = lines.map(lambda line:(line.split("\t")[5],1))
result1 = sitepair.reduceByKey(lambda v1,v2:v1+v2)
#排序 降序
result2 = result1.sortBy(lambda one:one[1],ascending=False)
result2.foreach(lambda em :showresult(em))
# ('www.baidu.com', 18791)
# ('www.dangdang.com', 18751)
# ('www.suning.com', 18699)
# ('www.mi.com', 18678)
# ('www.taobao.com', 18613)
# ('www.jd.com', 18519)
# ('www.gome.com.cn', 18493) #用户访问量
def uv(lines):
#同一个IP访问某个网站量要排重
sitepair = lines.map(lambda line:line.split("\t")[0]+"_"+line.split("\t")[5]).distinct()
result = sitepair.map(lambda one:(one.split("_")[1],1)).reduceByKey(lambda v1,v2:v1+v2).sortBy(lambda one:one[1],ascending=False)
result.foreach(lambda one:showresult(one))
# ('www.baidu.com', 15830)
# ('www.suning.com', 15764)
# ('www.mi.com', 15740)
# ('www.jd.com', 15682)
# ('www.dangdang.com', 15641)
# ('www.taobao.com', 15593)
# ('www.gome.com.cn', 15590) def uvExceptBJ(lines):
usiteviews = lines.filter(lambda line:line.split("\t")[1] != "北京").map(lambda line:line.split("\t")[0]+"_"+line.split("\t")[5]).distinct()
result1 = usiteviews.map(lambda one:(one.split("_")[1],1)).reduceByKey(lambda v1,v2:v1+v2)
result2 = result1.sortBy(lambda one:one[1],ascending=False)
result2.foreach(lambda em : showresult(em))
# ('www.baidu.com', 15399)
# ('www.mi.com', 15341)
# ('www.suning.com', 15294)
# ('www.jd.com', 15255)
# ('www.dangdang.com', 15181)
# ('www.gome.com.cn', 15154)
# ('www.taobao.com', 15131) def getTop2Location(lines):
#按照网站分组
site_locations = lines.map(lambda line:(line.split("\t")[5],line.split("\t")[1])).groupByKey()
result = site_locations.map(lambda one:getCurrSiteTop2Location(one)).collect()
for em in result:
print(em)
# ('www.suning.com', [('山西', 1102), ('广西', 606)])
# ('www.jd.com', [('山西', 1069), ('湖北', 614)])
# ('www.taobao.com', [('山西', 1065), ('安徽', 601)])
# ('www.gome.com.cn', [('山西', 1029), ('内蒙', 590)])
# ('www.dangdang.com', [('山西', 1083), ('香港', 591)])
# ('www.mi.com', [('山西', 1085), ('广东', 617)])
# ('www.baidu.com', [('山西', 1028), ('台湾', 641)]) def getCurrSiteTop2Location(one):
site = one[0]
locations = one[1] locationdict = {}
#汇总每个网站中location的数量
for location in locations:
if location in locationdict:
locationdict[location] += 1
else:
locationdict[location] = 1
resultlist = []
#使用内置函数排序
sortedList = sorted(locationdict.items(),key = lambda kv:kv[1],reverse = True)
#取前两个地区
if len(sortedList) < 2:
resultlist = sortedList
else:
for i in range(2):
resultlist.append(sortedList[i])
return site,resultlist def getTopOperation(lines):
site_operations = lines.map(lambda line:(line.split("\t")[5],line.split("\t")[6])).groupByKey()
result = site_operations.map(lambda one:getCurrSiteTopOperation(one)).collect()
for em in result:
print(em)
# ('www.suning.com', [('View', 3168)])
# ('www.jd.com', [('Login', 3132)])
# ('www.taobao.com', [('Regist', 3196)])
# ('www.gome.com.cn', [('Click', 3170)])
# ('www.dangdang.com', [('Buy', 3179)])
# ('www.mi.com', [('Buy', 3231)])
# ('www.baidu.com', [('Comment', 3207)]) def getCurrSiteTopOperation(one):
site = one[0]
operations = one[1]
operationDict = {}
for operation in operations:
if operation in operationDict:
operationDict[operation] += 1
else:
operationDict[operation] = 1 resultList=[]
sortedList = sorted(operationDict.items(), key=lambda kv:kv[1], reverse=True)
if len(sortedList) < 1:
resultList=[]
else:
resultList.append(sortedList[0])
return site,resultList def getTop3User(lines):
#另外一种思路 按照用户分组 统计每个用户访问不同网站数量
site_uid_count = lines.map(lambda line:(line.split("\t")[3],line.split("\t")[5])).groupByKey().flatMap(lambda one:getSiteInfo(one))
#按照网站分组之后再取前三
result = site_uid_count.groupByKey().map(lambda one:getCurSiteTop3User(one)).collect()
for em in result:
print(em)
# ('www.suning.com', [('1522294989941', 5), ('1522294980028', 5), ('1522294986337', 5)])
# ('www.jd.com', [('1522295002636', 5), ('1522294988631', 5), ('1522294990824', 4)])
# ('www.taobao.com', [('1522294992394', 5), ('1522294982477', 5), ('1522294999369', 5)])
# ('www.gome.com.cn', [('1522294994219', 5), ('1522294988497', 5), ('1522294991142', 5)])
# ('www.dangdang.com', [('1522294994360', 5), ('1522294988712', 5), ('1522294992239', 4)])
# ('www.mi.com', [('1522294987189', 5), ('1522294989540', 5), ('1522294980962', 5)])
# ('www.baidu.com', [('1522294991559', 6), ('1522294989188', 5), ('1522294996021', 5)]) #统计每个用户访问网站数量 然后返回每个网站对应用户访问量
def getSiteInfo(one):
uid = one[0]
sites = one[1]
siteDict = {}
for site in sites:
if site in siteDict:
siteDict[site] += 1
else:
siteDict[site] = 1
resultList=[]
for site,count in siteDict.items():
resultList.append((site,(uid,count)))
return resultList def getCurSiteTop3User(one):
site = one[0]
uid_counts = one[1]
top3List = ["","",""]
for uid_count in uid_counts:
for i in range(0,len(top3List)):
if top3List[i] == "":
top3List[i] = uid_count
break
else:
if uid_count[1] > top3List[i][1]:
for j in range(2,i,-1):
top3List[j] = top3List[j-1]
top3List[i] = uid_count
break
return site,top3List if __name__ == '__main__':
conf = SparkConf().setMaster("local").setAppName("pvuv")
sc = SparkContext(conf=conf)
sc.setLogLevel("WARN")
lines = sc.textFile('../../data/pvuvdata')
# 1).统计PV,UV
pv(lines)
uv(lines)
# 2).统计除了北京地区外的UV
uvExceptBJ(lines)
# 3).统计每个网站最活跃的top2地区
getTop2Location(lines)
# 4).统计每个网站最热门的操作
getTopOperation(lines)
# 5).统计每个网站下最活跃的top3用户
getTop3User(lines)
#停止
sc.stop()
【机器学习之二】python开发spark案例的更多相关文章
- 【机器学习之一】python开发spark环境搭建
环境 spark-1.6 python3.5 一.python开发spark原理使用python api编写pyspark代码提交运行时,为了不破坏spark原有的运行架构,会将写好的代码首先在pyt ...
- visio二次开发——图纸解析
(转发请注明来源:http://www.cnblogs.com/EminemJK/) visio二次开发的案例或者教程,国内真的非常少,这个项目也是花了不少时间来研究visio的相关知识,困难之所以难 ...
- windows下搭建spark+python 开发环境
有时候我们会在windows 下开发spark程序,测试程序运行情况,再部署到真实服务器中运行. 那么本文介绍如何在windows 环境中搭建简单的基于hadoop 的spark 环境. 我的wind ...
- 【基于spark IM 的二次开发笔记】第一天 各种配置
[基于spark IM 的二次开发笔记]第一天 各种配置 http://juforg.iteye.com/blog/1870487 http://www.igniterealtime.org/down ...
- 机器学习算法与Python实践之(二)支持向量机(SVM)初级
机器学习算法与Python实践之(二)支持向量机(SVM)初级 机器学习算法与Python实践之(二)支持向量机(SVM)初级 zouxy09@qq.com http://blog.csdn.net/ ...
- Python开发【第二十二篇】:Web框架之Django【进阶】
Python开发[第二十二篇]:Web框架之Django[进阶] 猛击这里:http://www.cnblogs.com/wupeiqi/articles/5246483.html 博客园 首页 ...
- openfire spark 二次 开发 服务插件
==================== 废话 begin ============================ 最近老大让我为研发平台增加即时通讯功能.告诉我用comet 在web端实现即 ...
- Python什么是二次开发的意义?python在.net项目采用
任何人都知道python在.net该项目是做什么的啊? 辅助用途,用作"二次开发"..net站点的话python主要是CGI才用.能够用python编写B/S程序. 解释一下二次开 ...
- PC结束 Spark 二次开发 收到自己主动,并允许好友请求
本次Spark二次开发是为了客服模块的开发, 能让用户一旦点击该客服则直接自己主动加入好友.而客服放则需自己主动加入好友,不同弹出对话框进行允许,这方便的广大客服. 如今废话不多说,直接上代码. pa ...
随机推荐
- 《CoderXiaoban团队》实验十 团队作业6:团队项目系统设计改进与详细设计
实验十 团队作业6:团队项目系统设计改进与详细设计 项目 内容 这个作业属于哪个课程 任课教师博客主页链接 这个作业的要求在哪里 实验十 团队作业6:团队项目系统设计改进与详细设计 团队名称 Code ...
- 《BUG创造队》第八次团队作业:Alpha冲刺
项目 内容 这个作业属于哪个课程 2016级软件工程 这个作业的要求在哪里 实验十二 团队作业8:软件测试与ALPHA冲刺 团队名称 BUG创造队 作业学习目标 (1)掌握软件测试基础技术.(2)学习 ...
- Linux——自定义服务命令
前言 这个写部署禅道的时候包含了这个内容,但是今天弄的时候突然忘记了,所以还是重新写下. 步骤 有的同学可能会不知道一些系统自带的目录是什么意思,所以我这里就拆分下,不直接创建 进入到系统服务目录 c ...
- Spring Security 3多用户登录实现之二 多登录界面展示
作者 接前讲,首先针对一个多种用户类型的登录需求,需要先实现多种用户类型的登录界面的展示,Spring Security提供了这样一个接口来帮助我们实现多种用户类型的登录界面的展示,这个接口就是Aut ...
- c#语言学习笔记(1)
环境:VS Express 2013 for Desktop 也可以vs社区版,不过学习的话,Express本版做一些小的上位机工具应该是够用了学习的网站:https://www.runoob.com ...
- Dubbo源码分析:ProxyFactory
roxyFactory将对外开放的服务进行封装.这里使用到代理的方式.ProxyFactory接口有两个不同的实现类:JavassistProxyFactory和JdkProxyFactory.Jdk ...
- python完成数组格式的请求参数的加密计算
#输入 '''order_id:31489 join_course[0][join_tel]:13130999882 join_course[0][join_name]:任学雨 join_course ...
- python - 手机号正则匹配
Python 手机号正则匹配 # -*- coding:utf-8 -*- import re def is_phone(phone): phone_pat = re.compile('^(13\d| ...
- 洛谷 P1908 逆序对 题解
每日一题 day43 打卡 Analysis 因为数据规模,所以我们需要对其进行离散化,新创一个数组a里面来放在我们的初始序列中在这个位置上的数是第几大的这里还要用一个小技巧排序,关于离散化的技巧我们 ...
- MongoDB 4.2 的主要亮点(转载)
在6月份召开的MongoDB全球用户大会上, MongoDB官宣了MongoDB Server 4.2,在经过100,000多个运行实例的测试后,MongoDB 4.2表现强劲.现在4.2版本正式上线 ...