spark任务,使用 repartition 对数据进行了重新分区,但任务输入数据大小仍存在不均衡

目录

目录

确认 Spark 任务重新分区后的数据不均衡

1. 检查分区大小

2. 使用 DataFrame API 检查分区

3. 使用 Spark UI 查看分区情况

4. 使用日志记录分区信息

可能原因

1. 数据分布不均衡

2. 分区策略

3. 数据预处理

解决方案

1. 检查数据分布

2. 使用 coalesce 减少分区

3. 自定义分区器

4. 数据预处理优化

结论


做了一个操作,发现数据不均衡:

sp_bp_pic_df = chengren_sp_bp_link_df.select("pic_large_url_list", "pic").dropDuplicates(["pic_large_url_list", "pic"]).repartition(300).cache()

确认 Spark 任务重新分区后的数据不均衡

要确认 Spark 任务在使用 repartition 对数据进行了重新分区后,任务输入数据大小仍存在不均衡,可以通过以下步骤进行验证和分析:

1. 检查分区大小

使用 RDD.glom() 方法可以查看每个分区的数据量。glom() 方法将每个分区的数据转换为一个列表,从而可以检查每个分区的大小。

# 获取每个分区的大小
partition_sizes = sp_bp_pic_df.rdd.glom().map(len).collect()

# 打印每个分区的大小
for i, size in enumerate(partition_sizes):
    print(f"Partition {i}: {size} records")

2. 使用 DataFrame API 检查分区

可以通过 DataFrame API 来检查每个分区的数据量,确保数据分布均匀。

# 获取每个分区的大小
partition_sizes = sp_bp_pic_df.rdd.mapPartitionsWithIndex(
    lambda idx, it: [(idx, len(list(it)))], preservesPartitioning=True).collect()

# 打印每个分区的大小
for idx, size in partition_sizes:
    print(f"Partition {idx}: {size} records")
3. 使用 Spark UI 查看分区情况

在运行 Spark 作业时,可以通过 Spark UI 查看每个任务的输入数据大小和分区情况。

  1. 打开 Spark UI

    • 运行 Spark 作业时,Spark UI 通常会在本地机器的 4040 端口(或其他端口)启动。可以通过浏览器访问 http://localhost:4040 查看 Spark UI。
  2. 查看 Stages 页面

    • 在 Spark UI 中,点击 "Stages" 标签,可以查看所有阶段的详细信息,包括每个阶段的任务数量、输入输出大小等。
  3. 查看 Tasks 页面

    • 在每个阶段的详细信息页面中,可以查看每个任务的输入数据大小。如果某些任务的输入数据大小明显大于其他任务,说明数据分布不均衡。
4. 使用日志记录分区信息

可以在代码中添加日志记录,输出每个分区的数据量,以便在日志中查看分区情况。

 
import logging

# 配置日志
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# 获取每个分区的大小并记录日志
partition_sizes = sp_bp_pic_df.rdd.mapPartitionsWithIndex(
    lambda idx, it: [(idx, len(list(it)))], preservesPartitioning=True).collect()

for idx, size in partition_sizes:
    logger.info(f"Partition {idx}: {size} records")

可能原因

尽管您已经使用 repartition 对数据进行了重新分区,但任务输入数据大小仍存在不均衡的情况。这可能由以下几个原因引起:

1. 数据分布不均衡

即使在重新分区后,数据分布仍可能不均衡。例如,如果某些键的频率远高于其他键,重新分区也可能无法完全平衡数据。

2. 分区策略

repartition 使用随机分区策略,可能会导致某些分区的数据量仍然较大。如果数据本身存在倾斜,随机分区可能无法解决问题。

3. 数据预处理

在 repartition 之前进行的操作(如 dropDuplicates)可能会影响数据的分布,导致某些分区的数据量较大。

解决方案

为了进一步优化数据分布,可以尝试以下几种方法:

1. 检查数据分布

首先,检查数据的分布情况,以确定是否存在数据倾斜。可以通过以下代码查看每个分区的数据量:

from pyspark.sql import Row

# 获取每个分区的大小
partition_sizes = sp_bp_pic_df.rdd.glom().map(len).collect()

# 打印每个分区的大小
for i, size in enumerate(partition_sizes):
    print(f"Partition {i}: {size} records")
2. 使用 coalesce 减少分区

如果数据量较小,可以尝试使用 coalesce 减少分区数量,以提高数据的均匀分布:

 

sp_bp_pic_df = sp_bp_pic_df.coalesce(100).cache()

3. 自定义分区器

如果数据存在显著的倾斜,可以使用自定义分区器来更好地平衡数据。例如,可以使用 hash 分区器:

from pyspark.sql.functions import hash

# 添加一个分区键
sp_bp_pic_df = sp_bp_pic_df.withColumn("partition_key", hash(col("pic_large_url_list")))

# 按分区键进行重新分区
sp_bp_pic_df = sp_bp_pic_df.repartition(300, "partition_key").drop("partition_key").cache()
 
4. 数据预处理优化

在进行 repartition 之前,尽量减少不必要的操作(如 dropDuplicates)对数据分布的影响。可以在重新分区后进行这些操作:

# 先重新分区,再去重
sp_bp_pic_df = chengren_sp_bp_link_df.repartition(300, "pic_large_url_list", "pic").dropDuplicates(["pic_large_url_list", "pic"]).cache()

结论

尽管已经使用 repartition 进行了分区,但任务输入数据大小仍可能不均衡。通过检查数据分布、使用自定义分区器、优化数据预处理等方法,可以进一步优化数据分布,减少任务输入数据大小的不均衡,提高作业的整体性能和效率。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/783519.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Java反射与Fastjson的危险反序列化

什么是Java反射? 在前文中,我们有一行代码 Computer macBookPro JSON.parseObject(preReceive,Computer.class); 这行代码是什么意思呢?看起来好像就是我们声明了一个名为 macBookPro 的 Computer 类,它由 fastjson 的 parseObje…

工程仪器振弦采集仪的设计与研发进展

工程仪器振弦采集仪的设计与研发进展 工程仪器振弦采集仪是一种用于测量和记录物体振动参数的仪器。它能够实时采集物体的振动信号,并通过内部的传感器将振动信号转化为电信号,然后进行信号放大和处理,最终以数字形式显示或存储。 河北稳控科…

2024图纸加密软件TOP8排行丨企业保护数据安全最佳选择

图纸往往包含了设计人员的创意和智慧,是企业的重要资产。加密可以防止未经授权的复制、分发或使用,保护设计的原创性和独特性不被侵犯。 许多图纸可能含有公司的商业秘密,比如特定的技术参数、生产流程或是产品设计等。这些信息若泄露给竞争…

股票数据分析(K线图、均值图、MACD图、RSI图)--股票日数据

数据 数据是上证指数日行情数据,股票代码000002.sz,原始数据shdata示例如下: 读取数据: import numpy as np import pandas as pd import mplfinance as mpf import matplotlib.pyplot as plt from datetime import datetime imp…

JVM原理(二十):JVM虚拟机内存的三特性详解

1. 原子性、可进行、有序性 1.1. 原子性 Java内存模型围绕着在并发过程中如何处理原子性、可见性和有序性这三个特征来建立的。 Java内存模型来直接保证的原子性变量操作包括read、load、assign、use、store和write这六个。我们大致可以认为,基本数据类型的访问、…

vllm技术分享

vLLM Question: 推理所生成的序列长度大小是无法事先预知的,大部分框架会按照(batch_size, max_seq_len)这样的固定尺寸,在gpu显存上预先为一条请求开辟一块连续的矩形存储空间。这样的分配方法很容易引起“gpu显存利用不足”的问题&#xff…

ICE启动AI:人工智能高频交易平台测试进入尾段

Intercontinental Exchange, Inc.(ICE)宣布,其革命性AI高频交易平台ICE.AI已经完成搭建,目前已全面进入测试最终阶段,该平台利用先进的人工智能技术,主旨在提升交易效率和市场分析的精确度,即将为全球交易者带来前所未有的交易体验。 性能验证: ICE.AI平台在测试阶段主要进行性…

【QT中堆栈布局的实现】

学习分享 1、环境设置,头文件2、.h文件2.1、主界面.h文件2.2、对话界面1.h文件2.3、对话界面2.h文件 3、.cpp文件3.1、对话界面1.cpp3.2、对话界面2.cpp3.3、主界面.cpp3.4、main.cpp 1、环境设置,头文件 该示例使用C14实现,因此在QT项目pro文…

【银河麒麟】系统内存使用异常现象分析及建议

1.现象描述 问题机器系统内存占用长时间90%以上,同时伴随着高iowait,在故障时无法ssh登录,同时也影响生产业务。但之后系统内存占用会突然掉下来,在内存自己掉下来后能ssh登录。 2.显示分析 2.1 sa日志分析 查看问题机器3月15日…

什么是企业服务总线?它包含哪些技术组件?

我们每个人都会去医院,您描述下我们去医院的场景,然后引出这个挂号流程,通过挂号流程中的一个问题或者什么东西来吸引他的好奇心,这样呢?会比现在的预设场景好一些。我举个例子,人工智能怎么帮人看病。如果…

关于put提交不了参数的解决办法

html中form表单只支持GET与POST请求,而DELETE、PUT等method并不支持, 如图所示 参数请求改成RequestBody,用json格式传参即可解决问题

AI直播手机APP震撼发布!3大场景直播,60秒一键开播!

无需繁琐准备,无需复杂操作,60 秒在抖音及其他平台一键开播,青否数字人AI直播APP正式发布! 3大AI直播类型,6大核心 AIGC 技术,让新手小白也能轻松搞定数字人在全平台直播,并且有效规避违规风险&…

数据跨境法案:美国篇上

近年来随着全球数字化的加速发展,数据已成为国家竞争力的重要基石。在这样的背景下,中国软件和技术出海的场景日益丰富。本系列邀请到在跨境数据方面的研究人员针对海外的数据跨境政策进行解读。 本期将针对美国对数据跨境流动的态度和政策进行阐释。过…

代码随想录算法训练营Day62|冗余连接、冗余连接II

冗余连接 108. 冗余连接 (kamacoder.com) 考虑使用并查集&#xff0c;逐次将s、t加入并查集中&#xff0c;当发现并查集中find(u)和find(v)相同时&#xff0c;输出u和v&#xff0c;表示删除的边即可。 #include <iostream> #include <vector> using namespace s…

游戏开黑语音-使用云服务器部署teamspeak服务(系统Ubuntu 20.04 LTS)

目录 前置物品服务器调整及部署1.重装系统2.换源3.下载teamspeak服务端并部署 连接服务器参考 前置物品 一台云服务器&#xff08;系统&#xff1a;Ubuntu 20.04 LTS) 服务器调整及部署 1.重装系统 在腾讯云官网的主机控制台内&#xff0c;选择重装系统 (由于之前为了快速和…

【收藏】欧盟CE、美国FDA法规及标准查询常用网站

01 CE法规&标准查询网站 医疗器械主管部门的网站 网址: https://www.camd-europe.eu/ 简介: CAMD的全称是Competent authorities for medical devices&#xff0c;翻译成中文叫做医疗器械监管机构&#xff0c;实际上它指的是欧盟成员国医疗器械监管机构的联盟&#xff…

江门数字化mes系统定制哪家好 珠海盈致mes系统服务商

对于江门数字化MES系统的定制服务&#xff0c;选择珠海盈致科技是一个不错的选择。珠海盈致科技是一家专业的智能制造解决方案提供商&#xff0c;具有丰富的数字化制造和MES系统定制经验。以下是选择珠海盈致科技的一些优势&#xff1a; 专业团队&#xff1a;珠海盈致科技拥有一…

Hack The Box-PermX

总体思路 CVE-2023-4220->敏感信息收集->符号链接攻击 信息收集&端口利用 nmap -sSVC permx.htbStarting Nmap 7.94SVN ( https://nmap.org ) at 2024-07-07 21:16 EDT Nmap scan report for permx.htb Host is up (0.24s latency). Not shown: 998 closed tcp po…

为什么要设计DTO类

为什么要使用DTO类&#xff0c;下面以新增员工接口为例来介绍。 新增员工 1.1 需求分析和设计 1.1.1 产品原型 一般在做需求分析时&#xff0c;往往都是对照着产品原型进行分析&#xff0c;因为产品原型比较直观&#xff0c;便于我们理解业务。 后台系统中可以管理员工信息…

供应RTL8366SC-CG瑞昱芯片

标17566722766题 长期供应各品牌原装芯片&#xff1a; RTL8366SC-CG RTL8382L-VB-CG RTL8218D-CG RTL8192EU-VP-CG RTL8821CU-CG RTL8811CU-CG RTL8723DU-CG RTL8723DS-CG RTL8711AM-VB1-CG RTL8111H-VB-CG RTL8111H-CG RTL8211F-CG RTL8211E-VB-CG RTL8733BS…