使用 PySpark 读取csv数据进行分析,将结果数据导入招聘数据

简介: 使用 PySpark 读取csv数据进行分析,将结果数据导入招聘数据

使用 PySpark 读取csv数据进行分析,将结果数据导入招聘数据

1. 设置 PySpark 环境:

设置 PySpark 环境,PySpark 需要一个 SparkSession 来与 Spark 功能进行交互。我们还需要配置 Spark 支持 Hive,并包含 MySQL 连接器 JAR 以实现数据库连接。

from pyspark.sql import SparkSession

spark = SparkSession.builder \
    .enableHiveSupport() \
    .config("spark.driver.extraClassPath", "lib/mysql-connector-java-8.0.30.jar") \
    .getOrCreate()
    

这里我们需要导入一个mysql jdbc的依赖jar。

2. 从 CSV 读取数据:

我们的招聘数据存储在一个 CSV 文件中。我们将定义一个函数将这些数据读入 Spark DataFrame 中。我们将指定一个模式以确保每列的数据类型正确。

from pyspark.sql.types import StringType, StructType

def read_data_from_csv(path):
    schema = StructType() \
        .add("recruitment_positions", StringType(), True) \
        .add("recruitment_city", StringType(), True) \
        .add("recruitment_salary", StringType(), True) \
        .add("recruitment_experience", StringType(), True) \
        .add("recruitment_skills", StringType(), True) \
        .add("recruitment_company", StringType(), True) \
        .add("recruitment_industry", StringType(), True) \
        .add("recruitment_scale", StringType(), True)

    df = spark.read \
        .option("header", True) \
        .schema(schema) \
        .csv(path)

    return df

# 示例用法:
df = read_data_from_csv("../data_prepare/data.csv")

3. 数据分析:

接下来,我们将对招聘数据进行一些基本的数据分析。我们将选择相关列并根据需要应用转换。

def data_analysis(df):
    df.createTempView("job")

    df = spark.sql("""
    SELECT 
        recruitment_positions,
        recruitment_salary,
        recruitment_skills AS recruitment_requirements,
        recruitment_experience,
        '本科' AS recruiting_educational_qualifications,
        recruitment_company,
        recruitment_scale AS company_stage,
        recruitment_industry,
        recruitment_skills,
        recruitment_city,
        recruitment_city AS recruitment_area,
        recruitment_city AS recruitment_address,
        recruitment_scale
    FROM job
    LIMIT 10
    """)

    df.show()
    return df

# 示例用法:
df = data_analysis(df)

4. 将数据写入 MySQL:

一旦我们分析了数据,可能希望将其存储在 MySQL 数据库中以进行进一步处理或报告。我们将定义一个函数将 DataFrame 写入 MySQL,导入数据之前需要创建mysql表。

CREATE TABLE `recruitment_data` (
  `recruitment_data_id` int NOT NULL AUTO_INCREMENT COMMENT '招聘数据ID',
  `recruitment_positions` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘职位',
  `recruitment_salary` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘薪资',
  `recruitment_requirements` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘职位',
  `recruitment_experience` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘经历',
  `recruiting_educational_qualifications` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘学历',
  `recruitment_company` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘公司',
  `company_stage` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '公司阶段',
  `recruitment_industry` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘行业',
  `recruitment_skills` varchar(500) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘技能',
  `recruitment_city` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘城市',
  `recruitment_area` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘区域',
  `recruitment_address` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘地址',
  `recruitment_scale` varchar(64) COLLATE utf8mb4_unicode_ci DEFAULT NULL COMMENT '招聘规模',
  `create_time` datetime NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT '创建时间',
  `update_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`recruitment_data_id`)
) ENGINE=InnoDB AUTO_INCREMENT=26698 DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci COMMENT='招聘数据'

pyspark追加写入mysql

def write_data_to_mysql(df):
    df.write.format("jdbc") \
        .option("url", "jdbc:mysql://localhost:3306/project05928") \
        .option("driver", "com.mysql.jdbc.Driver") \
        .option("dbtable", "recruitment_data") \
        .option("user", "root") \
        .option("password", "12345678") \
        .mode("append") \
        .save()

# 示例用法:
write_data_to_mysql(df)

结论:

在本博客文章中,我们探讨了如何使用 PySpark 分析招聘数据。我们从设置 PySpark 环境开始,然后读取 CSV 文件中的数据,进行数据分析,最后将分析后的数据导入到 MySQL 数据库中。PySpark

的可伸缩性和性能使其成为处理大量招聘数据的理想选择。通过利用 PySpark 的功能,组织可以获得有价值的见解,优化他们的招聘流程并做出数据驱动的决策。

完整代码

from pyspark.sql import SparkSession
from pyspark.sql.types import StringType, StructType


def read_data_from_csv(path):

    schema = StructType() \
          .add("recruitment_positions",StringType(),True) \
          .add("recruitment_city",StringType(),True) \
          .add("recruitment_salary",StringType(),True) \
          .add("recruitment_experience",StringType(),True) \
          .add("recruitment_skills",StringType(),True) \
          .add("recruitment_company",StringType(),True) \
          .add("recruitment_industry",StringType(),True) \
          .add("recruitment_scale",StringType(),True)

    df = spark.read\
          .option("header", True)\
          .schema(schema)\
          .csv(path)

    return df

def data_ana(df):

    df.createTempView("job")

    df = spark.sql("""
    select 
    recruitment_positions,
    recruitment_salary,
    recruitment_skills as recruitment_requirements,
    recruitment_experience,
    '本科' as recruiting_educational_qualifications,
    recruitment_company,
    recruitment_scale as company_stage,
    recruitment_industry,
    recruitment_skills,
    recruitment_city,
    recruitment_city as recruitment_area,
    recruitment_city as recruitment_address,
    recruitment_scale
    from job
    limit 10
    """)

    df.show()
    return df

def write_data2mysql(df):

    df.write.format("jdbc") \
        .option("url", "jdbc:mysql://localhost:3306/project05928") \
        .option("driver", "com.mysql.jdbc.Driver") \
        .option("dbtable", "recruitment_data") \
        .option("user", "root") \
        .option("password", "12345678") \
        .mode("append") \
        .save()


if __name__ == '__main__':
    spark = SparkSession.builder \
          .enableHiveSupport()\
          .config("spark.driver.extraClassPath","lib/mysql-connector-java-8.0.30.jar")\
          .getOrCreate()
    df = read_data_from_csv("../data_prepare/data.csv")
    df = data_ana(df)

    write_data2mysql(df)

    spark.stop()
相关实践学习
每个IT人都想学的“Web应用上云经典架构”实战
本实验从Web应用上云这个最基本的、最普遍的需求出发,帮助IT从业者们通过“阿里云Web应用上云解决方案”,了解一个企业级Web应用上云的常见架构,了解如何构建一个高可用、可扩展的企业级应用架构。
MySQL数据库入门学习
本课程通过最流行的开源数据库MySQL带你了解数据库的世界。   相关的阿里云产品:云数据库RDS MySQL 版 阿里云关系型数据库RDS(Relational Database Service)是一种稳定可靠、可弹性伸缩的在线数据库服务,提供容灾、备份、恢复、迁移等方面的全套解决方案,彻底解决数据库运维的烦恼。 了解产品详情: https://www.aliyun.com/product/rds/mysql 
相关文章
|
算法 前端开发 Java
在字节当了几个月的牛马,醒悟了。
以前也分享过不少实习体验,比如去年就分享了一位师弟的美团实习体验:美团实习三个月,我受益良多,今天来分享一下一位学习圈中学弟的字节实习体验。
735 0
|
数据可视化 定位技术 Python
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
【100天精通Python】Day68:Python可视化_Matplotlib 绘制热力图,示例+代码
4770 0
|
Android开发
android Compose中沉浸式设计、导航栏、状态栏的处理
android Compose中沉浸式设计、导航栏、状态栏的处理
3305 0
android Compose中沉浸式设计、导航栏、状态栏的处理
|
资源调度 Python
标准/正态分布(python实现)
标准/正态分布(python实现)
1450 0
|
存储 编译器 C语言
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
【ARM汇编速成】零基础入门汇编语言之C与汇编混合编程(四)
|
人工智能 数据可视化 前端开发
DB-GPT v0.6.0 版本更新,发布六大核心新特性!
DB-GPT v0.6.0 版本已发布,这是一个开源的AI原生数据应用开发框架,带来了多项新特性,包括AWEL协议升级至2.0,支持复杂编排;改进的数据应用创建与生命周期管理,支持多模式构建;GraphRAG增强图社区摘要与混合检索,图索引成本降低50%;丰富的Agent Memory类型;支持Text2NLU与Text2GQL微调;GPT-Vis前端可视化升级。这些更新助力企业快速构建智能数据应用,推动数字化转型。
|
Go Docker Python
docker的python与go镜像的制作
docker的python与go镜像的制作
433 1
|
SQL 存储 分布式计算
阿里云 Paimon + MaxCompute 极速体验
Paimon 和 MaxCompute 的对接经历了长期优化,解决了以往性能不足的问题。通过半年紧密合作,双方团队专门提升了 Paimon 在 MaxCompute 上的读写性能。主要改进包括:采用 Arrow 接口减少数据转换开销,内置 Paimon SDK 提升启动速度,实现原生读写能力,减少中间拷贝与转换,显著降低 CPU 开销与延迟。经过双十一实战验证,Paimon 表的读写速度已接近 MaxCompute 内表,远超传统外表。欢迎体验!
|
存储 数据挖掘 数据处理
【Python DataFrame 专栏】优化 DataFrame 性能:提升数据处理效率的秘诀
【5月更文挑战第19天】优化 Python DataFrame 性能的关键点包括:选择合适的数据类型以节省内存,避免重复计算,利用向量化操作,考虑使用 `iterrows` 或 `itertuples` 迭代,优化索引以及借助 `Cython` 或 `Numba` 加速代码执行。通过这些策略,能提升数据处理效率,应对大规模数据挑战。
823 2
【Python DataFrame 专栏】优化 DataFrame 性能:提升数据处理效率的秘诀
|
SQL 分布式计算 大数据
Paimon 与 Spark 的集成(二):查询优化
通过一系列优化,我们将 Paimon x Spark 在 TpcDS 上的性能提高了37+%,已基本和 Parquet x Spark 持平,本文对其中的关键优化点进行了详细介绍。
120101 30