- 导入必要的库
from pyspark import SparkContext, SparkConf
from pyspark.sql import SparkSession
- 创建SparkSession
conf = SparkConf().setAppName("HR Data Analysis")
sc = SparkContext(conf=conf)
spark = SparkSession(sc)
- 读取数据
# 读取员工信息数据
employees = spark.read.format("csv").option("header", "true").load("employees.csv")
# 读取部门信息数据
departments = spark.read.format("csv").option("header", "true").load("departments.csv")
# 读取薪资信息数据
salaries = spark.read.format("csv").option("header", "true").load("salaries.csv")
# 读取职位信息数据
titles = spark.read.format("csv").option("header", "true").load("titles.csv")
- 数据清洗和预处理
# 将员工信息数据进行清洗和预处理
employees = employees.dropDuplicates() # 去重
employees = employees.dropna() # 去除缺失值
# 将部门信息数据进行清洗和预处理
departments = departments.dropDuplicates() # 去重
departments = departments.dropna() # 去除缺失值
# 将薪资信息数据进行清洗和预处理
salaries = salaries.dropDuplicates() # 去重
salaries = salaries.dropna() # 去除缺失值
# 将职位信息数据进行清洗和预处理
titles = titles.dropDuplicates() # 去重
titles = titles.dropna() # 去除缺失值
- 数据合并
# 合并员工信息数据和薪资信息数据
employee_salaries = employees.join(salaries, on="emp_no")
# 合并员工信息数据和职位信息数据
employee_titles = employees.join(titles, on="emp_no")
# 合并员工信息数据、薪资信息数据和职位信息数据
employee_info = employee_salaries.join(employee_titles, on="emp_no")
# 合并员工信息数据、薪资信息数据、职位信息数据和部门信息数据
employee_department_info = employee_info.join(departments, on="dept_no")
- 数据聚合和分析
# 使用Spark SQL进行数据聚合和分析
employee_department_info.createOrReplaceTempView("employee_department_info")
result = spark.sql("""
SELECT
dept_name,
COUNT(DISTINCT emp_no) AS total_employees,
AVG(salary) AS avg_salary
FROM employee_department_info
GROUP BY dept_name
ORDER BY total_employees DESC
""")
# 显示结果
result.show()
我们使用了Spark SQL实现人力资源管理数据分析,具体实现过程如下:
- 首先,读取需要进行数据分析的数据,如员工信息数据、部门信息数据、薪资信息数据和职位信息数据等。
- 接着,对读取的数据进行清洗和预处理,如去重、去除缺失值等。
- 然后,使用join操作将不同的数据表进行合并,得到包含多个表的数据集。
- 最后,使用Spark SQL进行数据聚合和分析,得到需要的结果,如对部门的员工总数和平均工资进行统计分析。