1.sparkָ?指指标?Դ??
2.小技巧一:把roaring bitmap引入hive/spark,再也不怕count(distinct)了
3.利用SQL计算KS、标源AUC、计算IV、指指标PSI指标
4.使用 Docker 快速部署 Spark + Hadoop 大数据集群
5.Spark SQL深入分析之动态分区裁剪(Dynamic Partition Pruning)
sparkָ?标源?Դ??
对于Spark新手和有经验的开发者来说,理解Spark的计算android ormlite源码术语是提高沟通效率的关键。本文将通过解析Spark的指指标运行机制,结合WordCount案例,标源逐步介绍核心概念。计算
Spark运行的指指标核心框架包括SparkContext、Cluster Manager和Executor。标源Cluster Manager,计算如YARN、指指标Spark Standalone或Mesos,标源负责资源的计算统一管理和调度。每个工作节点上的Executor是一个独立的JVM进程,负责执行分配的任务,内部包含多个并发执行的Task线程和内存空间。
Spark的运行流程可以分为几个步骤:首先,driver(用户编写的Spark程序)创建SparkContext或SparkSession,并与Cluster Manager通信,将任务分解成Job。Job由一系列Stage组成,Stage之间的执行是串行的,由shuffle、reduceBy和save等操作触发。菠菜源码全套Task是Stage的基本执行单元,一个Stage可以包含多个Task,每个Task处理数据的一部分。
Partition是数据源的切分,RDD(分布式弹性数据集)由多个partition组成,用于并行执行任务。当我们提交Spark job时,它会被拆分成多个Stage和Task,然后发送到Executor执行。每个Stage的执行结果会汇总到Driver,最后所有节点的数据在Master节点上聚合,生成性能指标。
部署模式,如Standalone、YARN或Mesos,决定了Cluster Manager的类型。运行模式则指Driver运行的位置,Client模式下Driver在提交任务的机器上,而Cluster模式下Driver在集群中。在实际的WordCount示例中,YARN部署模式下,只有一个collect操作,导致一个Job被划分为三个Stage,每个Stage的执行依赖关系清晰可见。
通过理解这些术语,麦克指标源码开发者可以更准确地描述Spark应用程序的执行过程。希望本文能帮助你更好地掌握Spark的术语,提升开发效率。如果你对大数据或人工智能领域感兴趣,不妨关注我获取更多内容。
小技巧一:把roaring bitmap引入hive/spark,再也不怕count(distinct)了
小技巧一:引入Roaring Bitmap到Hive/Spark,解决count(distinct)问题
在SQL中,`count(distinct xxx)`常用于计算去重数量。当`xxx`为byte, shortint, int等数值类型时,可以将其转化为bitmap位运算,加速运算。对于非数值类型,可以考虑将其转换为一个唯一的数字,构建广义字典。Roaring Bitmap的基本思想是使用一个位图来唯一标记某个正整数,用于记录无重复的整数数组。
例如,数组[2,3,4,5]可以通过一个字节记录。通过依次设置数字n在第n+1个位置的位,可以表示数组。对于数字范围0到n,需要`n/ +1`字节的存储空间。与数组存储相比,Roaring Bitmap的武汉疫情源码存储空间通常更小,约为数组的1/。
Roaring Bitmap适用于无法直接存储的其他类型数字,通过转换为唯一数字进行存储。在处理如`[0,]`的场景中,使用Roaring Bitmap需要字节的空间,而数组存储只需要8字节,因此不划算。Roaring Bitmap在底层采用数组存储,以适应数字分散的场景。
当处理如`[0,]`和`[,0]`的场景时,Roaring Bitmap可能无法区分数字顺序或正确识别重复值。在大数据领域,如活跃人数等去重指标的计算中,Roaring Bitmap可以加速计算过程,尤其是在离线执行引擎Hive/Spark中引入Roaring Bitmap来实现精准去重。
考虑到Hive本身不支持Roaring Bitmap数据类型,可以将其序列化为`binary`类型使用。在函数体系方面,需要实现一系列的UDF和UDAF函数,如`bitmap_count`、`bitmap_and`、`bitmap_not`、`bitmap_union`、`bitmap_contains`、`range_bitmap`、cdn平台源码`bitmap_to_array`、`array_to_bitmap`等,以支持bitmap的集合计数、交集、差集、并集和查询操作。
在留存分析场景中,可以利用Roaring Bitmap构建活跃位图来加速计算,如连续N天登录问题。通过将用户活跃日期构建为位图,可以快速判断用户是否连续活跃。在用户画像和用户圈选场景中,Roaring Bitmap可以用于构建用户活跃画像,提高数据处理效率。在电商场景中,通过构建轻度汇总表并使用Roaring Bitmap存储去重人数,可以有效避免重复计算,提高数据聚合的准确性。
对于大数值范围(如bigint),Roaring Bitmap也支持。考虑到实际应用中数值范围超过`2**`的情况较少,是否需要支持bigint取决于具体需求。在数据索引优化方面,可以考虑重新编码,使得连续分布,进一步提高查询性能。
利用SQL计算KS、AUC、IV、PSI指标
利用SQL计算KS、AUC、IV、PSI指标的实践方法在信贷风控中,KS、AUC、IV和PSI是关键的评估指标。传统的计算方法需要繁琐地从数据库导出数据到本地,再用Python处理。本文提供一种通过Spark-SQL直接在数据库中计算这些指标的便捷方案。
1. KS计算: KS指标可以通过分箱法进行计算,包括不分箱法、等频分箱和等距分箱。等频分箱法强调排序性和头部坏人捕捉率,推荐使用。2.
2. IV计算: IV衡量自变量对因变量的信息量,通过分箱表计算IV,直观反映变量的预测能力。
3.
3. AUC计算: AUC以ROC曲线下的面积表示,通过累加微积分中的梯形面积来估算。
4.
4. PSI计算: PSI基于分组稳定性,通常需要指定基准组,通过SQL计算得到模型在不同时间段的稳定性。
总的来说,SQL的分布式计算能力和简洁语法使得在数据库内计算这些指标变得高效。这大大节省了数据从业者的处理时间,提升了工作效率。 感谢liaoge对等频分箱法代码的贡献,希望本文能为你的风控模型评估提供帮助。所有内容受版权保护,如需转载,请注明作者和原文链接。使用 Docker 快速部署 Spark + Hadoop 大数据集群
为了简化大数据集群的快速部署,本文介绍了一种基于Docker环境的Spark + Hadoop集群搭建方法,使用BitNami提供的成熟镜像方案。BitNami是提供开源软件部署方案的项目,其开发的Docker镜像已经获得大量下载,如用于Spark的镜像已超过百万次下载。为了搭建集群,首先拉取BitNami的Spark和Hadoop镜像。创建一个工作目录并在该目录下编写Docker Compose配置文件以启动集群,使用该配置文件后,通过执行命令启动Spark Docker集群。
集群的网络默认使用桥接网络,名为spark_default,该网络使用相同的子网网段,使得集群内容器可以相互通信。检查网络配置详情,可以查看每个容器分配的IPv4地址。在启动后的集群中,可通过映射的端口访问Spark Web UI。集群默认以Standalone模式启动,可以通过pose.yml文件以使用新镜像启动集群,最后启动集群并执行启动脚本。通过HDFS Web UI可以浏览写入HDFS的数据,同时可以在Spark中访问HDFS文件系统。
在搭建完成的Spark + Hadoop集群上,应用可以提交到YARN集群上运行,无需额外操作即可利用HDFS作为文件系统。本文提供了从零开始快速搭建Spark + Hadoop集群的步骤,简化了环境配置过程,为大数据处理任务提供了高效、灵活的解决方案。
Spark SQL深入分析之动态分区裁剪(Dynamic Partition Pruning)
前言
动态分区裁剪(Dynamic Partition Pruning, DPP)是Spark 3.0引入的一项性能优化功能。它的目标是减少数据源的I/O成本,从而提高查询性能。本文将深入探讨DPP的执行流程,展示其在Spark中的实现原理,以及如何通过DPP提高查询效率。
DDP执行流程示例
考虑两个使用parquet文件格式存储的Spark SQL表。小的维度表Customers,包含行唯一的customer_id和等级字段,等级范围从0到9。另一个表Orders,包含条交易记录,并且是按customer_id进行分区的。
目标是找到等级为"5"的客户的所有订单记录。在禁用DPP的情况下,物理查询计划显示查询按照预期的静态优化执行,小的Customers表首先被过滤(等级=5),过滤后的数据集广播到worker端以避免shuffle。在大表Orders方面,对所有个分区进行扫描,读取个数据文件和行。
开启DPP后,执行相同的查询。在Customers连接分支上,与静态优化相似,Customers表被过滤并广播给worker端。然而,在Orders连接分支上,广播的结果被重复使用作为过滤标准,仅读取包含"grade=5"的分区。执行逻辑简化为只读取与过滤条件匹配的分区数据。
从数据源读取的统计中,可见读取数据量大幅减少,只扫描了个分区中的个和个文件中的个。同时,"dynamic partition pruning time"指标表明应用了DPP。
DDP的底层原理
动态分区裁剪在Spark SQL中主要通过两个关键规则实现:PartitionPruning和PlanDynamicPruningFilters。
PartitionPruning规则在SparkOptimizer的默认批次中被激活,应用于逻辑计划优化阶段。它检查连接操作的类型和选择性,以判断DPP是否适用。规则首先确保表扫描可以对给定列进行过滤,然后检查连接类型是否支持在左侧裁剪分区,并评估右侧是否存在可以过滤连接键的选择性谓词。在插入DPP谓词之前,规则通过pruningHasBenefit方法估计优化的成本和收益,只有当收益大于成本或当前Spark会话启用了交换重用时,才会插入DPP谓词。
PlanDynamicPruningFilters规则在逻辑计划优化阶段应用,它通过重新使用广播的结果来删除重复的子查询。规则检查是否可以重用广播交换,并在执行计划准备阶段应用,以优化DPP查询的性能。
- THE END -