使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果
概述
前一篇文章,已经介绍了BMR的基础用法,再结合Spark和Scala的文档,我想应该是可以开始你的数据分析之路的.这一篇文章,着重进行一些简单的思路上的引导和分析.如果你分析招聘数据时,卡在了某个环节,可以试着阅读本文. 在继续下面的各种分析前,请确保已经读完了本系列文章的第三篇,并正确配置了BMR,同时导入了需要的真实招聘数据.
如果用传统编程语言工具?
假设我们从数据的采集,存储到数据的读取与使用,都是使用传统的语言工具,比如nodejs.
我们如果想知道到底有不同的薪水段有多少招聘职位并从多到少排序,我们可能需要:
- 新建对象,存储各个公司的数据;
- 循环读取数据,丰富各个公司的数据;
- 以薪水为分组,记录各个公司各个职位的信息;
- 以招聘数量为标准排序;
步骤,还算简单.暂且不提数据集再大些时,内存是极有可能吃不消;但是第2,3步的逻辑细节,就需要不少代码判断,比如如何循环读取文件数据?如果文件名命名是不规律的呢?如果文件数据是损坏的不规律数据呢?文件数据的json,并不是一个直接可用的职位数组,json结构转换的操作,逻辑上对你来说好实现吗?
诚然,用编程语言,没有什么做不了的,只是时间问题;既然谈到了时间,如果有另外一种明显快的多的方式,你会不用吗?
使用Spark进行分析
使用Spark实现上述同样的逻辑.以下操作,基于交互编程工具Zeppelin:
1.读取数据
val job = sqlContext.read.json("jobs")
job.registerTempTable("job")
job.printSchema()
2.获取各个薪水段职位数量,并排序
%sql
SELECT postionCol.salary,COUNT(postionCol.salary) salary_count
FROM job
LATERAL VIEW explode(content.positionResult.result) positionTable AS postionCol
WHERE content.positionResult.queryAnalysisInfo.positionName="ios"
GROUP BY postionCol.salary
ORDER BY salary_count DESC
真的可以直接使用类似于SQL的语法,进行半结构数据的复杂查询,不知道各位看官,看完有何感想?
如果你的SQL功底,不是特别好,我的建议是:有空多看看文档,有需求时先打英文关键词google
几个你可能感兴趣的数据的sparkSQL示例查询
送给有需要的童鞋:
按公司名显示某职位的招聘数量
%sql
SELECT postionCol.companyFullName,COUNT(postionCol.companyFullName) postition_count
FROM job
LATERAL VIEW explode(content.positionResult.result) positionTable AS postionCol
WHERE content.positionResult.queryAnalysisInfo.positionName="ios"
GROUP BY postionCol.companyFullName
ORDER BY postition_count DESC
显示某一职位对工作年限的要求
%sql
SELECT postionCol.workYear,COUNT(postionCol.workYear) workYears
FROM job
LATERAL VIEW explode(content.positionResult.result) positionTable AS postionCol
WHERE content.positionResult.queryAnalysisInfo.positionName="ios"
GROUP BY postionCol.workYear
ORDER BY workYears DESC
显示某一职位对学历的要求
%sql
SELECT postionCol.education,COUNT(postionCol.education) education_count
FROM job
LATERAL VIEW explode(content.positionResult.result) positionTable AS postionCol
WHERE content.positionResult.queryAnalysisInfo.positionName="ios"
GROUP BY postionCol.education
ORDER BY education_count DESC
显示某一职位各个公司的规模
%sql
SELECT postionCol.companySize,COUNT(postionCol.companySize) company_size_ount
FROM job
LATERAL VIEW explode(content.positionResult.result) positionTable AS postionCol
WHERE content.positionResult.queryAnalysisInfo.positionName="ios"
GROUP BY postionCol.companySize
ORDER BY company_size_ount DESC
系列后记
这是第一个系列文章.我觉得,我还是说清楚了一些问题的.文章本身的价值,决定于是否它能遇到刚好需要它的人.这些东西就交给时间!单就本系列而言,最后聚合分析出的结果,连我自己都很经验.现在招聘市场对中高端人才的需求比例竟然如此之大,突然发现我的思维还停留在里两年前,那个"大白"横行的时代.
坦白说,我一直在寻找着我这么做的意义.系列文章的第一篇和第二篇阅读量都很少.但是,很庆幸,我继续坚持写了第三篇,终于有人慢慢认可和阅读了,顺带着前两篇的阅读量月多了些.
我们还是应该相信,人们对于美好的有价值的东西是有鉴赏能力的;如果你觉得没有,可能刚好你的付出,没有被有需要的人看到.
把自己感觉有价值的东西,记录下来,其他的就交给时间--这就是最后我想对那些可爱的努力想写博客分享东西的童鞋说的!一起加油↖(ω)↗
本系列专属gitub仓库:https://github.com/ios122/spark_lagou
使用Spark分析拉勾网招聘信息(四): 几个常用的脚本与图片分析结果的更多相关文章
- 使用Spark分析拉勾网招聘信息(一):准备工作
本系列专属github地址:https://github.com/ios122/spark_lagou 前言 我觉得如果动笔,就应该努力地把要说的东西表达清楚.今后一段时间,尝试下系列博客文章.简单说 ...
- 使用Spark分析拉勾网招聘信息(二): 获取数据
要获取什么样的数据? 我们要获取的数据,是指那些公开的,可以轻易地获取地数据.如果你有完整的数据集,肯定是极好的,但一般都很难通过还算正当的方式轻易获取.单就本系列文章要研究的实时招聘信息来讲,能获取 ...
- 使用Spark分析拉勾网招聘信息(三): BMR 入门
简述 本文,意在以最小的篇幅,来帮助对大数据和Spark感兴趣的小伙伴,能尽快搭建一个可用的Spark开发环境.力求言简意赅.文章,不敢自称BMR的最佳实践,但绝对可以帮助初学者,迅速入门,能够专心于 ...
- 爬取拉勾网招聘信息并使用xlwt存入Excel
xlwt 1.3.0 xlwt 文档 xlrd 1.1.0 python操作excel之xlrd 1.Python模块介绍 - xlwt ,什么是xlwt? Python语言中,写入Excel文件的扩 ...
- Python3获取拉勾网招聘信息
为了了解跟python数据分析有关行业的信息,大概地了解一下对这个行业的要求以及薪资状况,我决定从网上获取信息并进行分析.既然想要分析就必须要有数据,于是我选择了拉勾,冒着危险深入内部,从他们那里得到 ...
- python-scrapy爬虫框架爬取拉勾网招聘信息
本文实例为爬取拉勾网上的python相关的职位信息, 这些信息在职位详情页上, 如职位名, 薪资, 公司名等等. 分析思路 分析查询结果页 在拉勾网搜索框中搜索'python'关键字, 在浏览器地址栏 ...
- Python爬取拉勾网招聘信息并写入Excel
这个是我想爬取的链接:http://www.lagou.com/zhaopin/Python/?labelWords=label 页面显示如下: 在Chrome浏览器中审查元素,找到对应的链接: 然后 ...
- Spark学习之路(四)—— RDD常用算子详解
一.Transformation spark常用的Transformation算子如下表: Transformation算子 Meaning(含义) map(func) 对原RDD中每个元素运用 fu ...
- jmeter(四十五)常用Beanshell脚本
整理了一批jmeter常用的beanshell脚本供大家参考! 时间戳 import java.text.SimpleDateFormat; import java.util.Calendar; im ...
随机推荐
- android 退出机制
android sdk 退出机制的研究 有多种, 方法一.用list保存activity实例,然后逐一干掉 上代码: import java.util.LinkedList; import java. ...
- Entity Framework搜索指定字段解决方案
public class Book { [Key] [DatabaseGenerated(DatabaseGeneratedOption.Identity)] public int Id { get; ...
- hadoop+hive使用中遇到的问题汇总
问题排查方式 一般的错误,查看错误输出,按照关键字google 异常错误(如namenode.datanode莫名其妙挂了):查看hadoop($HADOOP_HOME/logs)或hive日志 h ...
- NoSQL学习二:MongoDB基本管理命令
MongoDB命令学习 一.MongoDB命令帮助 在安装MongoDB后,启动服务器进程(mongod),可以通过在客户端命令mongo实现对MongoDB的管理和监控: 这是MongoDB最上层 ...
- C#函数式编程
提起函数式编程,大家一定想到的是语法高度灵活和动态的LISP,Haskell这样古老的函数式语言,往近了说ruby,javascript,F#也是函数式编程的流行语言.然而自从.net支持了lambd ...
- 翻译-Salt与Ansible全方位比较
原文链接:http://jensrantil.github.io/salt-vs-ansible.html 作者: Jens Rantil 之前某些时候我需要评估配置管理系统.结合从他人得到的意见,我 ...
- 虚拟化平台cloudstack(6)——使用maven:jetty调试
调试环境 ubuntu 12.04 JDK1.7 apache-maven-3.10 eclipse 4.2 Juno mysql 5 apache ant JDK的配置和安装 安装可以参考: htt ...
- WINFrom Excal 数据导入数据库
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- java 堆栈分析2
有了mat.同时我们发现Java有提供jvisualvm, jvisualvm是一个不错的工具: heap dump . thread dump. cpu/mem profile 无所不能. 不过观察 ...
- Ecshop :后台添加新功能 菜单及 管理权限 配置
需求:在<商品管理>下增加一项[商品推广管理]功能 一. 添加菜单项 打开 /admin/includes/inc_menu.php 文件(后台框架左边菜单),在最后添加一行如下: $mo ...