python partition by函数_python – 避免Spark窗口函数中单个分区模式的性能影响

在实践中,性能影响几乎与您省略了partitionBy子句相同.所有记录将被洗牌到一个分区,在本地排序并逐个顺序迭代.

差异仅在于总共创建的分区数.让我们举例说明使用包含10个分区和1000个记录的简单数据集的示例:

df = spark.range(0, 1000, 1, 10).toDF("index").withColumn("col1", f.randn(42))

如果您定义没有partition by子句的框架

w_unpart = Window.orderBy(f.col("index").asc())

并使用滞后

df_lag_unpart = df.withColumn(

"diffs_col1", f.lag("col1", 1).over(w_unpart) - f.col("col1")

)

总共只有一个分区:

df_lag_unpart.rdd.glom().map(len).collect()

[1000]

与具有虚拟索引的帧定义相比(与您的代码相比简化了一点:

w_part = Window.partitionBy(f.lit(0)).orderBy(f.col("index").asc())

将使用等于spark.sql.shuffle.partitions的分区数:

spark.conf.set("spark.sql.shuffle.partitions", 11)

df_lag_part = df.withColumn(

"diffs_col1", f.lag("col1", 1).over(w_part) - f.col("col1")

)

df_lag_part.rdd.glom().count()

11

只有一个非空分区:

df_lag_part.rdd.glom().filter(lambda x: x).count()

1

遗憾的是,没有通用的解决方案可以用来解决PySpark中的这个问题.这只是实现的固有机制与分布式处理模型相结合.

由于索引列是顺序的,因此您可以生成每个块具有固定数量记录的人工分区键:

rec_per_block = df.count() // int(spark.conf.get("spark.sql.shuffle.partitions"))

df_with_block = df.withColumn(

"block", (f.col("index") / rec_per_block).cast("int")

)

并用它来定义框架规范:

w_with_block = Window.partitionBy("block").orderBy("index")

df_lag_with_block = df_with_block.withColumn(

"diffs_col1", f.lag("col1", 1).over(w_with_block) - f.col("col1")

)

这将使用预期的分区数:

df_lag_with_block.rdd.glom().count()

11

大致统一的数据分布(我们无法避免哈希冲突):

df_lag_with_block.rdd.glom().map(len).collect()

[0, 180, 0, 90, 90, 0, 90, 90, 100, 90, 270]

但是在块边界上有许多空白:

df_lag_with_block.where(f.col("diffs_col1").isNull()).count()

12

由于边界易于计算:

from itertools import chain

boundary_idxs = sorted(chain.from_iterable(

# Here we depend on sequential identifiers

# This could be generalized to any monotonically increasing

# id by taking min and max per block

(idx - 1, idx) for idx in

df_lag_with_block.groupBy("block").min("index")

.drop("block").rdd.flatMap(lambda x: x)

.collect()))[2:] # The first boundary doesn't carry useful inf.

你总是可以选择:

missing = df_with_block.where(f.col("index").isin(boundary_idxs))

并分别填写:

# We use window without partitions here. Since number of records

# will be small this won't be a performance issue

# but will generate "Moving all data to a single partition" warning

missing_with_lag = missing.withColumn(

"diffs_col1", f.lag("col1", 1).over(w_unpart) - f.col("col1")

).select("index", f.col("diffs_col1").alias("diffs_fill"))

并加入:

combined = (df_lag_with_block

.join(missing_with_lag, ["index"], "leftouter")

.withColumn("diffs_col1", f.coalesce("diffs_col1", "diffs_fill")))

获得理想的结果:

mismatched = combined.join(df_lag_unpart, ["index"], "outer").where(

combined["diffs_col1"] != df_lag_unpart["diffs_col1"]

)

assert mismatched.count() == 0

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

oracle 最近的sql语句,oracle最近执行的sql语句

oracle最近执行的sql语句2017-01-13oracle 查询最近执行过的 SQL语句1、修改日期显示格式alter session set nls_date_format’YYYY-MM-DD HH24:MI:SS’;2、哪个主机最近执行的sql语句:SELECT b.sql_text,a.machine,a.username, a.module,c.sofar / totalwork * 100,c.elapsed_…

selinux= 为 disabled_「丁香园」五年没考过执医,就不要出来「为祸人间」了

如今,网上流传着一句话:「五年没考过执医,就不要出来为祸人间了」但事实上,有很多同学,并不是不适合这条路,而是不知道如何学习前段时间,20 年的执医考试分数出了。看到很多人在丁香论坛分享自己…

检测到目标url存在框架注入漏洞_HOST注入攻击剖析

关于网站的渗透测试可能师傅们都有自己一套思路,有个共同点就是目标网站基本属于全静态页面,几乎很少存在动态参数这时意味着客户端无法通过提交参数形式进行测试,理论上也规避掉了许多风险。既然无法从参数层面进行测试,那么考虑…

php简单环境,PHP 简单的环境搭建

windows nginx mysql php https://code.google.com/p/wnmp-server/ php手册 http://www.phpchina.com/download/handbook/openbiz_manual/php-bigxhtml.html http://www.php.net/manual/zh/index.php http://www.w3school.com.cn/php/index.asp http://localhwindows nginx m…

wpfdiagram 学习 教学_李倩、吴欣歆:新高考背景下高中语文教学的三个转变

新高考背景下高中语文教学的三个转变李倩 吴欣歆大量的实证研究指出,以中高考为代表的高利害型评价方式对教师教学具有显著的回冲效应。当考试与评价能够为学科学习带去更多富有价值的信息以及关于学习理念、学习策略的积极引领时,评价对教学的指挥棒作…

python莫比乌斯_莫比乌斯函数 - osc_7eqzxl4g的个人空间 - OSCHINA - 中文开源技术交流社区...

前导要学习莫比乌斯函数 需要学习 到 积性函数,深度理解欧拉筛。先说说什么是积性函数吧。积性函数其实积性函数非常好理解,定义积性函数:若gcd(a,b)1,且满足f(ab)f(a)f(b),则称f(x)为积性函数完全积性函数&#xff1a…

macos catalina 合盖 风扇狂转_防爆排风扇BFS-400叶轮直径400mm功率180W/220V转速1400rpm风量2400_...

防爆排风扇BFS-400叶轮直径400mm功率180W/220V转速1400rpm风量2400 一、防爆排风扇BFS-400叶轮直径400mm功率180W/220V转速1400rpm风量2400 风机概述隔爆型防爆排风扇(以下简称排风扇)其防爆性能按《爆炸性环境用防爆电气设备通用要求》《 爆炸性环境用防爆电气设备隔爆型电气设…

python的xlrd怎么安装_python接口测试,第三方包xlrd和xlutils,怎么安装

第1个:xlrd的下载地址:https://pypi.python.org/pypi/xlrd/0.9.2安装过程:下载后解压文件夹,使用cd命令行进入该文件夹后,用命令:python setup.py install 之后再import发现安装好了第2个:pip i…

linux传输文件scp自动接密码,配置scp在Linux或Unix之间传输文件无需密码

如何配置scp文件传输实现scp在Linux或Unix之间传输文件,首先需要配置好scp,默认scp要使用密码的,通过以下配置可以不用输入密码,就完成Linux或Unix之间的文件传输假设有2台Linux, A server, B server(ip假设…

Excel表Ctrl+v和Ctrl shift+v有什么区别_Ctrl键与10个数字键,26个字母键的组合应用技巧解读...

键盘是一种必备的输入设备,其应用率最高的就是10个数字和26个字母。如果将这10个数字和26个字母与Ctrl键组合,并应用到Excel中,会是怎样的一种体验。一、Ctrl与数字键。1、Ctrl1:打开【设置单元格格式】对话框。方法:选…

图像信噪比计算公式_CT 科研设计之图像质量对比研究三步曲

CT科研是CT技术的窗口,帮助医务工作者开展CT科研也是我们的责任和义务! 问如何科学地比较不同重建技术的图像质量?答首先要排除其他影响图像质量的因素,然后进行客观指标的比较,最后进行主观指标的比较。CT 科研设…

linux rm 中文文件夹,在Linux下删除文件及文件夹(rm)

删除目录、文件 rm(remove)功能说明:删除文件或目录。语  法:rm [-dfirv][--help][--version][文件或目录...]补充说明:执行rm指令可删除文件或目录,如欲删除目录必须加上参数”-r”,否则预设仅会删除文件。参  数…

vue 改变domclass_手机上的大片制作软件——如何使用VUE

作者:海旅所 姚嘉禾VUE是一款手机视频拍摄与美化工具,允许用户通过简单的操作实现视频的拍摄、导入视频的剪辑,表现力的细调、改变滤镜,加贴纸和背景音乐等功能,轻松在手机上拍出电影大片的质感,实时记录与…

徐涛八套卷pdf_徐涛八套卷pdf,11月9日资料更新!

每日更新:天猫正版优惠券 肖四肖八50 原价659?f/u枝口~令¥U2rvc9tppTl¥回?t~bao?或坫击しāη接 https://m.tb.cn/h.4XKmUmV 至留览器徐涛冲刺四件套56 原价619?復淛这个¥ehWyckQvkBq¥打кǎI?淘Ь?或點凢しāη…

linux查代替命令,Linux下查/删/替 命令(转)

▪查看某目录下所有文件的个数:[rootlocalhost1 opt]# ls -l |grep "^-"|wc -l▪查看某目录下所有文件的个数,包括子目录里面的:[rootlocalhost1 opt]# ls -lR|grep "^-"|wc -l▪查看某目录下文件夹(目录)的个数&#xf…

lan8720a自协商启动_紫金矿业2020届校招海外9站全面启动(面向全专业)

01了解紫金矿业自1993年始27载春秋,紫金矿业砥砺前行现已成长为中国控制金属矿产资源最多的企业之一AH 股上市千亿级矿业巨头紫金矿业口碑载道亚洲最佳矿业公司2019年《福布斯》排行榜全球黄金企业第1位有色金属企业第10位2019年《财富》中国企业排行榜稳居百强紫金…

cad移动时捕捉不到基点_硬盘或移动硬盘认不到时,应该怎样进行故障的检测才正确...

其实能理解许多PC用户或笔记本电脑用户,在操作系统无法正常启动或是移动硬盘无法正常识别时往往都是找身边懂维修或是公司IT人员先进行检测,但是在做这些操作时千万要慎重,毕竟这关系到存在硬盘上的重要数据。为了能够最大限度上保证数据的可…

linux move权限,Red Hat Enterprise Virtualization Manager MoveDisk目标域权限检查不足拒绝服务漏洞...

发布日期:2013-02-05更新日期:2013-02-27受影响系统:RedHat Enterprise Virtualization Manager 3.0描述:--------------------------------------------------------------------------------BUGTRAQ ID: 57750CVE(CAN) ID: CVE…

jq fileupload 设置最大文件大小5m_捷达将发布全新中大型SUV 或命名VS9/车长超5m

【太平洋汽车网 新车频道】近日,我们从相关渠道了解到,捷达将推出一款全新的中大型SUV车型,或命名为VS9。据悉,新车将与一汽-大众SMV同平台打造,也就是基于MQB-B,车身尺寸与途昂相仿,长度将超过…

uml活动图 各个功能的操作流程和分支_UML建模之活动图介绍(Activity Diagram)

一、活动图的组成元素 Activity Diagram Element1、活动状态图(Activity)2、动作状态(Actions)3、动作状态约束(Action Constraints)4、动作流(Control Flow)5、开始节点(Initial Node)6、终止节点(Final Node)7、对象(Objects)8、数据存储对象(DataStore)9、对象流(Object Flo…