当前位置: 首页 > news >正文

pyspark实践

1。pyspark是什么

PySpark 是 Apache Spark 的官方 Python 接口,它使得 Python 开发者能够访问 Spark 的核心功能,如:

  • Spark SQL:用于执行 SQL 查询以及读取数据的库,支持多种数据格式和存储系统。py.qizhen.xyz

  • DataFrame API:提供了一个分布式数据集合,使得数据处理和分析更加直观和高效。py.qizhen.xyz+1CSDN 博客+1

  • MLlib:用于进行机器学习的库。py.qizhen.xyz+1维基百科+1

  • GraphX:用于图形处理的库(在 PySpark 中通过第三方库如 GraphFrames 访问)。py.qizhen.xyz

  • Spark Streaming:用于实时数据流处理的库。py.qizhen.xyz

通过 PySpark,Python 开发者可以方便地进行大规模数据分析和数据挖掘工作,而无需深入了解分布式计算的复杂性。

2.实战

创建和管理 Spark 会话所需的类from pyspark.sql import SparkSession
import pyspark.sql.functions as F
#从 pyspark.sql.functions 模块中导入所有函数,并将其简写为 F
from pyspark.sql.types import *
#从 pyspark.sql.types 模块中导入所有的数据类型类。
from pyspark.sql.functions import udf
#使用 PySpark 创建和注册用户定义函数的第一步,允许将自定义的 Python 函数应用于 Spark 的数据处理流程中
spark = SparkSession.builder.appName('data_processing').getOrCreate()
#创建或获取一个 SparkSession 实例
schema = StructType().add('user_id',"string").add("country","string").add("browser","string").add("OS","string").add("age","integer")
#创建的 DataFrame 将具有预定义的列名和数据类型,有助于确保数据一致性和便于后续的数据处理操作
df_custom = spark.createDataFrame([("A203",'India',"Chrome","WIN",33),("A201",'China',"Safari","MacOS",35),("A205",'UK',"Mozilla","Linux",25)],schema = schema)
#这行代码使用 PySpark 创建了一个带有指定模式(schema)的 DataFrame。
df_custom.printSchema()
#用于以可读的层次结构格式展示 DataFrame 的结构信息。

df_custom.show()
#将 DataFrame 的前几行数据显示在控制台上

df_na=spark.createDataFrame([("A203",None,"Chrome","WIN",33),("A201",'China',None,"MacOS",35),("A205",'UK',"Mozilla","Linux",25)],schema=schema)
#使用指定的模式(schema)创建一个包含部分缺失值(None)的 DataFrame。

df_na.fillna('0').show()
#将 DataFrame df_na 中所有列的缺失值(null 或 None)替换为字符串 '0',然后以表格形式在控制台上显示前 20 行数据

df_na.fillna({'country':'USA','browser':'Google Chrome'}).show()
#使用 fillna() 方法,将 DataFrame df_na 中 country 列的缺失值替换为 'USA',browser 列的缺失值替换为 'Google Chrome'

df_na.na.drop().show()
#删除包含缺失值的行:df_na.na.drop() 会从 DataFrame df_na 中删除任何包含 null(或 None)值的行。默认情况下,drop() 方法会移除任何列中存在缺失值的行。
df_na.na.drop(subset='country').show()
#删除特定列中包含缺失值的行:df_na.na.drop(subset='country') 会从 DataFrame df_na 中删除 country 列中包含 null 或 None 值的行。

 对csv文件进行处理

df = spark.read.csv("customer_data.csv",header = True, inferSchema=True)
#读取名为 customer_data.csv 的 CSV 文件,并将其加载为 DataFrame
df.count()
查看数量

len(df.columns)
#查看列数
df.columns
#查看列名
df.filter(df['Avg_Salary']>500000).filter(df['Number_of_houses']>2).show()
#筛选

df.where((df['Avg_Salary']>500000)&(df['Number_of_houses']>2)).show()
#where() 是 PySpark DataFrame 的方法,用于根据指定的条件筛选行。它是 filter() 方法的别名,两者功能相同
df.groupBy('Customer_subtype').count().show()
#按客户子类型分组并统计每组数量的常用方法,有助于了解不同客户子类型的分布情况。
for col in df.columns:if col!='Avg_Salary':print(f" Aggregation for {col}")df.groupBy(col).count().orderBy('count',ascending=False).show(truncate=False)
#对 DataFrame df 中除 'Avg_Salary' 列以外的每一列进行分组计数,并按计数降序显示结果。

df.groupBy('Customer_main_type').agg(F.mean('Avg_Salary')).show()
#对 DataFrame df 按照 Customer_main_type 列进行分组,并计算每个主类型的平均薪资:
df.groupBy('Customer_main_type').agg(F.max('Avg_Salary')).orderBy('max(Avg_Salary)',ascending=False).show()
#用于对 DataFrame df 按照 Customer_main_type 列进行分组,并计算每个主类型的最高平均薪资,然后按降序排列结果
df.groupBy('Customer_subtype').agg(F.max('Avg_Salary').alias('max_salary')).orderBy('max_salary',ascending=False).show()
#在 PySpark 中,以下代码用于对 DataFrame df 按照 Customer_subtype 列进行分组,并计算每个子类型的最高平均薪资,然后按降序排列结果
df.groupBy("Customer_subtype").agg(F.collect_set("Number_of_houses")).show() 
#是在 PySpark 中用于按客户子类型分组并收集每组房屋数量的唯一值的常用方法,有助于了解不同客户子类型的房屋数量分布情况。
1. 初始化与数据创建
  • 使用 SparkSession.builder.getOrCreate() 初始化 Spark 环境。

  • 使用 StructType 明确定义 schema。

  • spark.createDataFrame() 构造了两个 DataFrame(一个有缺失值)。

2. DataFrame 基本操作
  • .printSchema():打印 schema 信息。

  • .show():展示数据内容。

  • .fillna():填充缺失值。

  • .na.drop() / .na.drop(subset=...):删除缺失值行。

  • .replace():替换字段值。

  • .drop():删除某一列。

3. CSV 文件读取
  • spark.read.csv(..., header=True, inferSchema=True) 读取并自动推断数据类型。

4. 基础探索与过滤
  • .count() / len(df.columns) / df.columns:了解数据结构。

  • .summary().show():生成描述性统计。

  • .filter() / .where():条件筛选数据。

  • .select():选择列。

5. 分组与聚合操作
  • .groupBy(...).count():分组计数。

  • .groupBy(...).agg(F.mean(...)):分组平均值。

  • .groupBy(...).agg(F.max(...)):分组最大值。

  • .agg(F.collect_set(...)):收集唯一值列表。

  • .orderBy(...):排序显示。

6. 列操作
  • .withColumn("new_col", F.lit(...)):添加常量列。

  • .withColumn("new_col", udf(col)):使用自定义 UDF 添加新列。

7. UDF / Pandas UDF
  • 使用标准 udf() 创建 age 分类函数。

  • 使用 pandas_udf() 实现归一化薪资计算(注释掉了实际调用)。

相关文章:

  • 火柴INIBOX专业矿机登场,碾压现有Initverse挖矿设备
  • YOLOv4:目标检测的新标杆
  • Pytest自动化测试框架搭建:Jenkins持续集成
  • AI学习搭档:开启终身学习新时代
  • torch cuda 版本安装
  • 【Java】DelayQueue
  • 5.27 day 30
  • 修改SpringBootApplication类的入参后,引用外部yml的启动命令要修改
  • Spring AI 本地Ollama
  • C++ 中的函数包装:std::bind()、std::function<>、函数指针与 Lambda
  • 一个开源的多播放源自动采集在线影视网站
  • 15.进程间通信(一)
  • c++复习_第一天(引用+小众考点)
  • 2025吉林CCPC 题解(前六题)
  • 【NLP基础知识系列课程-Tokenizer的前世今生第四课】生物信息中的 Tokenizer 策略:如何切开一段基因?
  • 【NLP基础知识系列课程-Tokenizer的前世今生第五课】从静态到可学:Tokenizer 的自适应演化之路
  • C/C++的OpenCV的锐化
  • ojs导入显示空白页错误信息
  • Ubuntu 下搭建ESP32 ESP-IDF开发环境,并在windows下用VSCode通过SSH登录Ubuntu开发ESP32应用
  • 【android bluetooth 协议分析 02】【bluetooth hal 层详解 6】【高通蓝牙hal主要流程介绍-下】
  • 新闻网站怎么做缓存/廊坊网站推广公司
  • 北京一个公司做网站认证/环球资源外贸平台免费
  • 企业做网站的费用/泰安做百度推广的公司
  • 电子邮箱网站建设/朝阳seo排名优化培训
  • 定制开发响应式网站/做网站的网络公司
  • 无备案网站加速/seo搜索优化公司报价