pythonspark编写文件完成RDD任务

本文介绍了如何在Python3.4.3环境下,使用Spark2.4.0的RDD操作,如map和reduceByKey,来统计招聘岗位的平均薪资、各地区岗位数量以及北京地区的平均最高薪资。作者通过示例展示了如何编写pyspark代码并提供了运行结果验证。
摘要由CSDN通过智能技术生成

一、实验目的

(1)熟悉Spark的RDD基本操作及键值对操作;

(2)熟悉使用RDD编程解决实际具体问题的方法。

二、实验平台

操作系统:Ubuntu16.04

Spark版本:2.4.0

Python版本:3.4.3

三、实验内容和要求

1. pyspark交互式编程

数据格式:

从左往右的列分别表示:职位编号、职位名称、薪资范围、工作区域、职位简述、工作年限、学历要求、职位详情等。

参考链接:spark rdd算子的简单练习_从以下5个题目中任选两个,使用rdd算子来完成,程序代码以及运行结果的截图写在-CSDN博客

请根据给定的实验数据,在pyspark中通过编程来计算以下内容:

(1)统计发布招聘岗位每个地区的平均最高薪酬和平均最低薪酬;

(2)统计每个地区的招聘岗位数;

(3)统计北京地区的平均最高薪酬;

答:创建数据如下,由于本题目需要的字段仅有“职位编号、职位名称、薪资最小值、薪资最大值、工作区域”,因此仅生成有这五个字段的97条数据,如下:

编写如下代码完成所有任务:

from pyspark import SparkConf, SparkContext

#引入必要工具包

def main():

       print("This work is running")

       conf = SparkConf().setMaster("local").setAppName("MyApp")

       sc = SparkContext(conf = conf)#这两行生成context,是必要的

       data = sc.textFile("file:///usr/local/spark/data/jobs.txt")

       lines = data.map(lambda a: a.split(","))

       min = lines.map(lambda a:(a[4],(int(a[2]),1)))#转换为键值对,添加1便于后续计数

       max = lines.map(lambda a:(a[4],(int(a[3]),1)))

       mins = min.reduceByKey(lambda a,b:(a[0]+b[0],a[1]+b[1]))#计算总和与个数

       maxs = max.reduceByKey(lambda a,b:(a[0]+b[0],a[1]+b[1]))

       mins_avg = mins.map(lambda a:(a[0],a[1][0]/a[1][1]))#计算均值

       maxs_avg = maxs.map(lambda a:(a[0],a[1][0]/a[1][1]))

       print("每个地区的平均最高、最低工资为:")

       maxs_avg.foreach(print)

       mins_avg.foreach(print)

       area = lines.map(lambda a:(a[4],1))#转换为键值对,添加1计数

       job_num = area.reduceByKey(lambda a,b:a+b)

       print("每个地区的岗位数目:")

       job_num.foreach(print)

       beijing = maxs_avg.filter(lambda a:a[0]=='北京') #过滤北京

       print("北京地区平均最高工资:")

       beijing.foreach(print)

if __name__ == '__main__':

       main()   

运行结果如下:

每个地区的平均最高、最低工资为:

('贵州', 10631.578947368422)

('北京', 10875.0)

('湖北', 11868.421052631578)

('四川', 11850.0)

('重庆', 10815.78947368421)

('贵州', 7105.263157894737)

('北京', 7225.0)

('湖北', 7815.789473684211)

('四川', 8100.0)

('重庆', 7236.8421052631575)

每个地区的岗位数目:

('贵州', 19)

('北京', 20)

('湖北', 19)

('四川', 20)

('重庆', 19)

北京地区平均最高工资:

('北京', 10875.0)

2. 结果验证

把数据导入excel中,使用averageifs(x:x,y:y,”北京”)和countif(x:x,”北京”)验证,其中x:x是工资列,y:y是区域列,第二个x:x是区域列,验证结果如下,与运行结果相同:

3. 心得体会

编写py文件进行spark运行的方法。

rdd语句进一步理解。

excel的函数使用。

  • 24
    点赞
  • 23
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值