招聘信息数据清洗


前言

相关知识
为了完成本关任务,你需要掌握:
1.Spark 清洗数据的相关方法,
2.空值列怎么删除;
3.怎么数据切分才能达到想要的数据。

Spark清洗数据相关方法
一、将含有空值的数据删除
1.将含有空值的数据删除;

2.data.drop() 如果不传递列名,不会做任何操作; drop 是用来丢弃列的,而 na.drop 是用来丢弃行的;

//drop函数默认参数any,即行中存在任一个null值都要删除此行
df.na.drop()
df.na.drop("any")
//参数all, 此行所有值都是null才删除此行
df.na.drop("all")
 
//只指定某些列进行空值的删除操作
df.na.drop("all",Seq("name1","name2"))

二、withColumn和split函数
1.withColumn 的第二个参数要传入已有列的 Column 对象,否则会报错;
2.column的表达式只能引用此数据集提供的属性。 添加引用其他数据集的列是错误的
3.split 切分可以用符号、数字、字母或者汉字为分界点进行切分。切分后可以新建一列也可以将原来的列覆盖成新的列。

val d1=df.withColumn("新列名",split(col("原列名"),"/")(0))

在这里插入图片描述
在这里插入图片描述

三、regexp_replace函数

regexp_replace(source, pattern, replace_string, occurrence)

参数说明:
● source: string 类型,要替换的原始字符串。
● pattern: string 类型常量,要匹配的正则模式,pattern 为空串时抛异常。
● replace_string: string,将匹配的 pattern 替换成的字符串。
● occurrence: bigint 类型常量,必须大于等于0,
大于0:表示将第几次匹配替换成 replace_string,
等于0:表示替换掉所有的匹配子串。
其它类型或小于0抛异常。

regexp_replace 函数举例:

 val df1 = df.withColumn("sex", regexp_replace(col("sex"), "无", "不限"))

在这里插入图片描述
在这里插入图片描述

数据集
/data/workspace/myshixun/step1/DATA 中有 zhaopindata.csv 招聘数据。数据集共 20 个字段,字段说明如下:

字段名 说明 数据类型
id 编号 int
position 职位 varchar
num 招聘人数 int
company 公司名称 varchar
job_type 工作类型 varchar
jobage 工作年限 varchar
lang 语言 varchar
age 年龄 varchar
sex 性别 varchar
education 学历教育 varchar
workplace 工作地点 varchar
worktime 工作时间 varchar
salary 薪资 varchar
welfare 福利待遇 varchar
hr 人事 varchar
phone 电话 int
address 地址 varchar
company_type 公司类型 varchar
industry 行业 varchar
require 岗位要求 varchar
部分数据展示,数据中有列名:

index,position,num,company,job_type,jobage,lang,age,sex,education,workplace,worktime,salary,welfare,hr,phone,address,company_type,industry,require
1,(贷款经理)电话销售,30,厦门冠顶投资有限公司,全职,不限,不限,16岁至30,,初中以上,厦门市同安区、厦门市海沧区、厦门市、厦门市集美区、厦门市湖里区、厦门市翔安区、厦门市思明区,"7.0小时/天,5天/周",5000,五险、住房公积金、带薪年假、年终双薪、绩效奖金、年终分红、通讯补贴、节日福利、专业培训、弹性工作、员工旅游、出国机会、每年多次调薪、全勤奖、不加班、无试用期,陈经理(经理),0592-6086055,湖滨东路6号华龙大厦1509(361000),民营/私营,IT互联网,一站式助贷机构----底薪4000+抽成最高50%。周末双休+五险一金+一天上7小时+法定节假日放假+浮动绩效奖+年终奖+晋升空间+生日会+定期聚餐团建随便做4000工资认真做7000工资勤奋做10000工资拼命做20000工资工作内容:室内办公无需外出,公司提供精准获客资源,纯机器营销,省去手工繁琐操作,通过微信或手机与新老客户沟通,寻找有资金需求的客户。做过电销、淘宝、微商、电商、客服、贷款、保险、房产、卡部优先。不限应届生、学生、兼职、快递员、服务员、送餐外卖、网约车司机等。能够承受销售压力,愿意挑战高薪,上不封顶。优秀精英可转成公司股东或分公司负责人。地址:厦门市思明区湖滨东路6号华龙大厦1509(梧村汽车站、湖滨东路站、BRT火车站、地铁3号线火车站直达)
2,((金融贷款产品销售)),30,厦门冠顶投资有限公司,全职,不限,不限,16岁至30,,初中以上,厦门市翔安区、厦门市思明区、厦门市湖里区、厦门市集美区、厦门市、厦门市海沧区、厦门市同安区,"8.0小时/天,5天/周",5000,五险、住房公积金、带薪年假、年终双薪、绩效奖金、年终分红、通讯补贴、节日福利、专业培训、弹性工作、员工旅游、出国机会、每年多次调薪、全勤奖、不加班、无试用期,陈经理(经理),0592-6086055,湖滨东路6号华龙大厦1509(361000),民营/私营,IT互联网,一站式助贷机构----底薪4000+抽成最高50%。周末双休+五险一金+一天上7小时+法定节假日放假+浮动绩效奖+年终奖+晋升空间+生日会+定期聚餐团建随便做4000工资认真做7000工资勤奋做10000工资拼命做20000工资工作内容:室内办公无需外出,公司提供精准获客资源,纯机器营销,省去手工繁琐操作,通过微信或手机与新老客户沟通,寻找有资金需求的客户。做过电销、淘宝、微商、电商、客服、贷款、保险、房产、卡部优先。不限应届生、学生、兼职、快递员、服务员、送餐外卖、网约车司机等。能够承受销售压力,愿意挑战高薪,上不封顶。优秀精英可转成公司股东或分公司负责人。
3,市场专员(泉州),1,佳格食品(厦门)有限公司,全职,不限,不限,20岁至35,,不限,泉州市,不限,不限,不限,方小姐(HR),0592-6885866-5826,厦门市海沧区三都路99号(中国(福建)自由贸易试验区厦门片区)(361026),台资/港资,住宿餐饮,岗位职责:1、导购招募及导购员培训管理。2、市场活动的提报及执行。3、市场费用之管控。4、赠品及广宣品管理。任职条件:1、女性,年龄35岁以下,大专及以上学历;2、有快速消费品工作经验;3、表达流利,吃苦耐劳;4、电脑操作熟练。

清洗之后的部分数据展示:

99454,销售,2,厦门普斯恩精密机械有限公司,全职,不限,不限,不限,不限,中专,厦门市集美区、厦门市,其他,面议,面议,王先生(经理),0592-5211506,厦门集美区杏林董任路8(361000)(合则约见、非请勿访),民营/私营,原材料和加工,岗位职责:1.现场客户、来电来邮客户询价的回复、产品性能的解答及后续跟踪维护。努力留住现有客户,不断增加客户数量,扩大客户行业群体,深挖客户需求。2.合同等业务流程中所需资料的签署,备份存档,销售开单,安排送货,货款对账,及时收款。全业务流程的跟踪处理。有异常及时反馈。3.公司安排的其它事宜。任职要求:1.性格开朗,品行端正,具备良好的沟通能力与服务意识。2.具备良好的团队合作精神。3.亲和力佳,擅长与客户沟通。4.大专以上学历,学习能力强,普通话标准,熟练运用OFFICE,懂CAD优先考虑。5.有塑料行业从业经验优先。
99461,日语和英文国际业务代表,2,厦门德瑞雅喷码科技有限公司,全职,一年工作经验以上,不限,23岁至35,不限,大专,厦门市湖里区,"7.5小时/天,5天/周",7000,五险、住房公积金、商业保险、带薪年假、年终双薪、住房补贴、通讯补贴、高温补贴、节日福利、专业培训、定期体检、员工旅游、每年多次调薪、工作制服,林小姐(人事),(合则约见、谢绝来电),厦门市湖里区湖里大道56号第七层西侧(361006)(合则约见、非请勿访),民营/私营,电子技术,任职要求:1.大专以上学历,英语、日语熟练;2.有良好的表达能力;3.有相关工业产品销售/服务或海外销售经验优先考虑,4.具有与客户沟通协调的能力、能适应在一定压力下工作5.良好沟通能力和团队合作能力岗位职责:1.重点客户追踪和电子邮箱的维护;2.行业客户信息收集及客户的分类;3.定期给客户发送产品的最新信息;4.客户现场设备报修和工程师协调调动。待遇:1.五天工作制2.五险一金3.年假4.体检5.年终奖6.公司旅游
99693,维修电工,3,厦门花开富贵物业管理有限公司,全职,不限,不限,不限,不限,不限,厦门市湖里区,"8.0小时/天,5天/周",5000,五险、住房公积金、商业保险、带薪年假、年终双薪、绩效奖金、高温补贴、节日福利、定期体检,许小姐/张小姐(HR),0592-5098277,厦门市湖里区恒禾七尚5号门(361008)(合则约见、非请勿访),台资/港资,物业管理商业中心,学历要求: 不限 职位性质: 全职        招聘对象: 不限年龄要求: 20岁至40岁工作地点: 厦门市湖里区参考月薪: 5000-5400/月(必须持证上岗,高压证、电梯管路员证)上班时间: 8.0小时/6/周    正常白班薪资福利: 五险、住房公积金、商业保险

编程要求
根据提示,在右侧编辑器 #Begin-End# 区间补充代码,

根据下列要求完成数据清洗,要求如下:

1.读取 /data/workspace/myshixun/step1/DATA 下面的 zhaopindata.csv文件,分隔符为, ;

2.去除首列;

3.将性别列中的无修改成不限;

4.将职位类型列中的毕业生见习修改成实习;

5.将教育列中的学历提取出来,保持数据的统一性,如:大专以上 变为 大专;

6.将薪资列和福利待遇列中的不限修改成面议;

7.将招聘人数列中的若干修改成 3 ;

8.将工作时间列和公司类型中的不限修改成其他;

9.将清洗过的数据保存到(/root/files/data)下,保存类型为csv。

考核说明
1.清洗之后的数据一共有多少行;
2.重复行是否删除;
3.任务要求是否都按照要求进行修改;
4.清洗之后的数据文件是否保存到规定的文件路径下。

代码示例如下

import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.sql.SparkSession
import org.apache.spark.sql.functions._
object zhaopin_clean {
  def main(args: Array[String]): Unit = {
    var conf = new SparkConf().setMaster("local[*]").setAppName("SparkTest")
    var sc = new SparkContext(conf)
    val spark:SparkSession = SparkSession.builder().config(conf).getOrCreate()
    //************* Begin *************
    val df = spark.read
      .format("csv")
    //将第一行清除掉
      .option("header","true")
      //读取要清洗的数据
      .load("/data/workspace/myshixun/step1/DATA/zhaopindata.csv").toDF()
      //将性别列中的无修改成不限
    val df1 = df.withColumn("sex", regexp_replace(col("sex"), "无", "不限"))
    //将职位类型列中的毕业生见习修改成实习
    val df2=df1.withColumn("job_type", regexp_replace(col("job_type"), "毕业生见习", "实习"))
    //将教育列中的本科,专科提取出来,保持数据的统一性
    val df3=df2.withColumn("education",split(col("education"),"以")(0))
    //将薪资列中的不限修改成面议
    val df4=df3.withColumn("salary",regexp_replace(col("salary"),"不限","面议"))
    //将福利待遇列中的不限修改成面议
    val df5=df4.withColumn("welfare",regexp_replace(col("welfare"),"不限","面议"))
    //将招聘人数列中的若干修改成3
    val df6=df5.withColumn("num",regexp_replace(col("num"),"若干|不限","3"))
      //将工作时间列中的不限修改成其他
    val df7=df6.withColumn("worktime",regexp_replace(col("worktime"),"不限","其他"))
    //将公司类型中不限改成其他
    val df8=df7.withColumn("company_type",regexp_replace(col("company_type"),"不限","其他"))
    df8.distinct().coalesce(1).write.csv("/root/files/data")
    //#************** End **************#
    spark.stop()
  }
}

在这里插入图片描述


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值