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

PySpark广播表连接解决数据倾斜的完整案例

使用PySpark解决数据倾斜问题的完整案例,通过广播表连接的方式来优化性能。

  1. 准备数据

假设我们有两张表,一张大表 big_table 和一张小表 small_table ,小表将作为广播表。

from pyspark.sql import SparkSession# 初始化SparkSession
spark = SparkSession.builder.appName("Data Skew Example").getOrCreate()# 模拟大表数据
big_table = spark.createDataFrame([(i, f"value_{i}") for i in range(1000000)], ["id", "data"])# 模拟小表数据
small_table = spark.createDataFrame([(i, f"category_{i%10}") for i in range(100)], ["id", "category"])
  1. 查看广播表大小
import sys
from pyspark.sql.functions import col# 查看小表的大小,单位字节
small_table_size = small_table.select(col("*")).count() * sys.getsizeof(tuple(small_table.first()))
print(f"Size of small_table: {small_table_size} bytes")
  1. 初始连接(产生数据倾斜)
# 不使用广播进行连接,会产生数据倾斜joined_without_broadcast = big_table.join(small_table, "id")
  1. 使用广播表连接
from pyspark.sql.functions import broadcast# 使用广播表连接
joined_with_broadcast = big_table.join(broadcast(small_table), "id")
  1. 查看Spark WebUI分析数据倾斜

运行作业:在执行上述代码时,Spark会启动作业,可以通过Spark WebUI查看作业执行情况。在浏览器中访问 http://:4040 (这是Spark默认的WebUI端口,实际可能不同)。
查看阶段详情:进入“Jobs”页面,找到对应的作业,点击进入查看各阶段(Stage)详情。在阶段详情里,可以看到任务(Task)的执行时间分布。没有广播时,数据倾斜表现为部分任务执行时间远长于其他任务;使用广播后,任务执行时间应更均匀。
查看执行计划:也可以通过调用 joined_with_broadcast.explain() 查看执行计划,确认广播表是否正确应用。

# 查看执行计划
joined_with_broadcast.explain()
  1. 完整代码示例
from pyspark.sql import SparkSession
import sys
from pyspark.sql.functions import col, broadcast# 初始化SparkSession
spark = SparkSession.builder.appName("Data Skew Example").getOrCreate()# 模拟大表数据
big_table = spark.createDataFrame([(i, f"value_{i}") for i in range(1000000)], ["id", "data"])# 模拟小表数据
small_table = spark.createDataFrame([(i, f"category_{i%10}") for i in range(100)], ["id", "category"])# 查看小表的大小,单位字节
small_table_size = small_table.select(col("*")).count() * sys.getsizeof(tuple(small_table.first()))
print(f"Size of small_table: {small_table_size} bytes")# 不使用广播进行连接,会产生数据倾斜
joined_without_broadcast = big_table.join(small_table, "id")# 使用广播表连接
joined_with_broadcast = big_table.join(broadcast(small_table), "id")# 查看执行计划
joined_with_broadcast.explain()

这个案例先创建了大小两张表,查看小表大小以确认适合广播,演示了普通连接产生数据倾斜的情况,接着使用广播表连接解决该问题,并说明了如何从Spark WebUI查看数据倾斜的发生与解决效果。


http://www.mrgr.cn/news/83328.html

相关文章:

  • 在 Safari 浏览器中,快速将页面恢复到 100% 缩放(也就是默认尺寸)Command (⌘) + 0 (零)
  • CES 2025|美格智能高算力AI模组助力“通天晓”人形机器人震撼发布
  • nginx负载均衡-基于端口的负载均衡(一)
  • 拥抱时代--AI(8)
  • 微信小程序实现拖拽盒子效果
  • redis:安装部署、升级以及失败回退
  • 高等数学学习笔记 ☞ 洛必达法则与泰勒公式
  • 【Rust自学】11.5. 在测试中使用Result<T, E>
  • Formality:默认配置文件
  • 【python翻译软件V1.0】
  • 【数据链电台】洛克希德·马丁(Lockheed Martin)
  • P2249 【深基13.例1】查找
  • kubernetes第七天
  • notebook主目录及pip镜像源修改
  • 代码随想录 哈希 test 8
  • 【神经网络中的激活函数如何选择?】
  • 使用 Maxwell 计算母线的电动势
  • 赛车微型配件订销管理系统(源码+lw+部署文档+讲解),源码可白嫖!
  • Formality:工具生成的文件
  • 初学stm32 --- DAC输出
  • 51c~Pytorch~合集4
  • Ansys Fluent Aeroacoustics 应用
  • Java Web开发进阶——Spring Security基础与应用
  • 操作系统之文件系统
  • 2025年XR行业展望:超越虚拟,融合现实
  • 词作词汇积累:错付、大而无当、语焉不详、愈演愈烈