概述

前一篇文章,已经介绍了BMR的基础用法,再结合Spark和Scala的文档,我想应该是可以开始你的数据分析之路的.这一篇文章,着重进行一些简单的思路上的引导和分析.如果你分析招聘数据时,卡在了某个环节,可以试着阅读本文. 在继续下面的各种分析前,请确保已经读完了本系列文章的第三篇,并正确配置了BMR,同时导入了需要的真实招聘数据.

如果用传统编程语言工具?

假设我们从数据的采集,存储到数据的读取与使用,都是使用传统的语言工具,比如nodejs.

我们如果想知道到底有不同的薪水段有多少招聘职位并从多到少排序,我们可能需要:

  1. 新建对象,存储各个公司的数据;
  2. 循环读取数据,丰富各个公司的数据;
  3. 以薪水为分组,记录各个公司各个职位的信息;
  4. 以招聘数量为标准排序;

步骤,还算简单.暂且不提数据集再大些时,内存是极有可能吃不消;但是第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

最新文章

  1. sqlite里执行查询提示未启用约束、主键冲突之——数据竟能超字段长度存储
  2. 配置ConvenientBanner时出现的问题
  3. Java 容器:Collection 初探之 List
  4. Cocos2dx.3x入门三部曲-Hello Game项目解析(三)
  5. hdu 1028 Ignatius and the Princess III(DP)
  6. HDOJ 1856 More is better
  7. Android Touch事件传递机制通俗讲解
  8. HDU 1222(数论,最大公约数)
  9. java方法的多态性理解
  10. TurnipBit开发板DIY呼吸的吃豆人教程实例
  11. JQ 判断 浏览器打开的设备类型
  12. Android四大组件之Service --- 服务的生命周期
  13. 正版phpstorm,webstorm,goland(Jetbrains系列都可以)免费激活步骤(图文详解)(亲测有效)
  14. [转]通过设置nginx的client_max_body_size解决nginx+php上传大文件的问题
  15. Bubble Sort (找规律)
  16. oracle与mysql(2)
  17. grid - 通过网格线号码来定位网格项目
  18. centos6.5 系统乱码解决 i18n --摘自http://blog.csdn.net/yangkai_hudong/article/details/19033393
  19. Linux上实现Windows的SQLPlus保存SQL历史记录功能
  20. iOS开发之二维码扫描

热门文章

  1. HTTP协议中POST、GET、HEAD、PUT等请求方法以及一些常见错误
  2. C# 调用restful服务开源库
  3. android知识杂记(一)
  4. java 网络(socket)
  5. Entity Framework 5.0系列之数据操作
  6. [.net 面向对象程序设计进阶] (8) 托管与非托管
  7. Java提高篇(二八)------TreeSet
  8. 浅析Windows安全相关的一些概念
  9. 创业6&7
  10. Senparc.Weixin.MP SDK 微信公众平台开发教程(十三):地图相关接口说明