- 博客(60)
- 收藏
- 关注
原创 Python进程与协程:高效编程的核心秘密
进程是操作系统资源分配和调度的核心概念,理解进程对于掌握操作系统原理和开发高效的多任务程序至关重要。通过多进程或多线程,可以实现复杂的并发任务,提升系统性能。协程(Coroutine)是一种轻量级的用户态线程,由程序员控制调度,可以在不同任务间切换执行而不需要线程上下文切换的开销。
2025-07-16 15:39:39
1045
原创 Python多线程编程解析
这种执行方式的优点是简单直观,但缺点是当某个任务需要长时间等待时(如IO操作),程序效率会很低。在实际应用中,我们往往需要引入多线程或多任务机制来提高程序执行效率。1.互斥锁的作用:保证同一个时刻只有一个线程去操作共享数据,保证共享数据不会出现错误2.上锁和释放锁必须成对出现,否则容易造成死锁现象死锁:一直等待对方释放锁的情景就是死锁;会造成应用程序停止响应,不能再处理其他任务3.互斥锁的缺点:会影响代码的执行效率。
2025-07-10 17:07:52
384
原创 Python可迭代对象、迭代器与生成器
开发者也可以通过实现__iter__()print(num)生成器(Generator)是一种特殊的迭代器,它允许你在需要时才生成值,而不是一次性生成所有值。这种特性使得生成器在处理大量数据或无限序列时特别高效。可迭代对象是最大的集合,包含所有可以迭代的对象迭代器是特殊的可迭代对象,增加了状态记忆能力生成器是最特殊的迭代器,提供了更简洁的实现方式。
2025-07-09 16:05:38
1122
原创 Python编程必备:文件操作全攻略
文件操作是编程中的基本技能,涉及对存储在计算机上的文件的读取、写入和管理。文件定位操作允许我们在文件中移动指针位置,以便随机访问文件内容。:对于大文件,应避免一次性读取全部内容,而采用逐行或分块读取。语句可以安全地打开文件,确保文件在使用后自动关闭。:打开文件后有一个指针指示当前读写位置,可以通过。:以只读方式打开文件,文件指针位于文件开头。:以写入方式打开文件,文件指针位于文件开头。:以追加方式打开文件,文件指针位于文件末尾。:可读写,文件指针位于文件开头。:可读写,文件指针位于文件末尾。
2025-07-08 15:23:52
682
原创 Python单例模式&魔法方法or属性
类属性是公共的,它被定义在类层面而非实例层面,所有类的实例都可以共享访问这个属性。例如,在一个Student类中定义class_name="高三一班"作为类属性,那么所有Student的实例都能访问到这个班级名称。类属性可以通过类名直接访问(如Student.class_name),也可以通过实例访问(如student1.class_name)。所有类的实例方法、静态方法和类方法都能访问到这个属性。静态方法不需要访问类属性,因为静态方法和类、对象没有关联,它更像是一个独立于类的普通函数。
2025-07-05 15:04:46
1090
原创 Python递归函数:代码简洁的背后逻辑
递归函数是一种特殊的函数实现方式,指在函数定义中直接或间接调用函数本身。通俗地说,如果一个函数在执行过程中不是调用其他函数,而是直接调用自己的话,那么这个函数就是递归函数。递归是算法设计中一种重要的思想方法,在许多编程问题中都有广泛应用。使用闭包的过程中,一旦外函数被调用一次,返回了内函数的引用,虽然每次调用内函数,会开启一个函数,执行后消亡。但是闭包变量实际上只有一份,每次开启内函数都在使用同一份闭包变量。
2025-07-03 20:21:12
768
原创 Python面向对象编程:继承与多态
class 类名:@staticmethod # 使用装饰器声明为静态方法def 方法名(形参1, 形参2=默认值): # 可以包含多个形参,也可以设置默认参数"""方法的文档字符串,说明方法功能"""方法体代码 # 通常包含与类相关但不依赖实例的操作return 返回值 # 可选。
2025-07-02 17:14:54
1412
原创 面向对象与面向过程编程:核心区别解析
"""类的文档字符串"""class_bodyClassName是类名,必须符合以下规则:遵循大驼峰命名法(PascalCase),即每个单词首字母大写,如不能使用Python关键字不能包含特殊字符(除下划线外)尽量做到见名知意,反映类的功能或特性class_body包含类的属性和方法定义。
2025-07-01 17:46:05
1065
原创 Python函数核心:参数、返回值与嵌套技巧
在Python中,函数的参数可以通过不同的方式来定义和使用,以适应各种不同的调用场景。其中,使用星号(*)作为函数参数是一种常见的做法,它允许函数接收任意数量的参数。此外,Python还支持默认参数、命名关键字参数等其他形式的参数。函数:函数是组织好的、可重复使用的代码段,用来实现单一或相关联的功能。函数能提高应用的模块性和代码的重复利用率。这种机制允许在特定上下文中封装代码,并创建具有记忆功能的函数。嵌套函数可以访问外部函数的变量,形成闭包。在Python中,可以在一个函数内部定义另一个函数,这被称为。
2025-06-26 19:42:18
823
原创 Python深浅拷贝与可变对象全解析
在Python中,赋值操作是将数据存储到变量中的基本手段。赋值语句的形式多样且功能强大,从简单的单个变量赋值到复杂的序列解包、多目标赋值以及增强赋值。其中,变量名是用于存储数据的标识符,表达式可以是一个常量、变量、函数调用或其他更复杂的计算结果。深拷贝和浅拷贝都是对原对象的拷贝,但它们在处理对象的方式上有显著的区别。是指一旦创建后,其值不能被修改的对象。常见的不可变对象包括整数、浮点数、字符串和元组。是指在创建后可以改变其内容的对象。常见的可变对象包括列表、字典和集合。最基本的赋值语句形式是。
2025-06-25 19:55:40
636
原创 Python字典与集合操作全解析
Python 中的字典相当于 C++ 或者 Java 等高级编程语言中的容器 Map,每一项都是由 Key 和 Value 键值对构成的,当我们去访问时,根据关键字就能找到对应的值。访问字典里的值的时候,如果直接用 [] 访问,在没有找到对应键的情况下会报错,一个更好的替代方案是用内置的方法来取键值,这时候如果不存在也不会报错。字典的每个键值 key:value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。列表是方括号 [],元组是圆括号 (),字典是花括号 {}。
2025-06-25 08:27:10
444
原创 Python条件与循环全攻略
举个例子:用户从控制台输入成绩,如果满分,输出“你真棒”,如果60分输出“还需要加油哈!运算符:比较运算符、逻辑运算符、三目运算符(三元表达式)while条件:循环体(条件满足时段做的事情),改变变量。for循环:可以完成循环的功能,依次取出对象中的元素。while循环嵌套:就是while里面有while。
2025-06-21 10:49:47
488
原创 Python编程基础:变量、数值与字符串详解
字符串:需要加上引号,单引号和双引号都可以,包含了多行内容的适合也可以使用三引号。标识符:程序员定义的变量名,函数名。
2025-06-19 19:42:11
485
原创 Python新手必看:从安装到第一个程序
简介:编程语言是用来定义计算机程序的语言,用来向计算机发出指令;⑧.win+r 输入cmd,进入命令提示符窗口,输入python就会出来一些版本信息,说明python解释器已经安装完毕。注释的作用:用自己属性的语言,在程序中对某些代码进行标注说明,能够大大增强程序的可读性。Bug和Debug:程序故障统称为Bug,排除程序故障成为Debug。③.配置环境变量的作用:帮助系统能够自动找到相应包的路径。输出:print()方法用于打印输出,最常见的一个函数。python官网地址:www.python.org。
2025-06-18 19:33:03
1083
原创 Spark案例:用户行为数据分析实战
元组排序:先比较第一个,再比较第二个,再比较第三个,依此类推。(品类ID,(点击数量,下单数量,支付数量))点击数量排序,下单数量排序,支付数量排序。2. 统计品类的点击数量:(品类ID,点击数量)3. 统计品类的下单数量:(品类ID,下单数量)4. 统计品类的支付数量:(品类ID,支付数量)主要包含用户的4种行为:搜索,点击,下单,支付。5. 将品类进行排序,并且取前10名。6. 将结果采集到控制台打印出来。1. 读取原始日志数据。
2025-06-16 20:03:07
344
原创 Spark RDD分区与文件操作指南
Spark目前支持Hash分区和Range分区,自定义分区。Hash分区为当前的默认分区。分区器直接决定了RDD中分区的个数、RDD中每条数据经过Shuffle后进入那个分区,进而决定了Reduce的个数。只有Key-Value类型的RDD才有分区器,非Key-Value类型的RDD分区的值时None。每个RDD的分区ID范围:0~(numPartitions-1),决定这个值是属于那个分区的。文件格式分为:text文件、csv文件、sequence文件以及Object文件。
2025-06-14 14:33:52
436
原创 RDD持久化:缓存与检查点详解
所谓的检查点其实就是通过将RDD中间结果写入磁盘,由于血缘依赖过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果检查点之后有节点出现问题,可以从检查点开始重做血缘,减少了开销。但是并不是这两个方法被调用时立即缓存,而是触发后面的action算子时,该RDD将会被缓存在计算节点的内存中,并供后面重用。如果一个RDD需要重复使用,那么需要从头再次执行来获取数据,所以RDD对象可以重用的,但是数据无法重用。cache默认持久化的操作,只能将数据保存到内存中,如果想要保存到磁盘文件,需要更改存储级别。
2025-06-13 19:32:42
597
原创 揭秘RDD血缘与宽窄依赖
RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。每个RDD会保存血缘关系,RDD不会保存数据的。RDD为了提供容错性,需要将RDD间的关系保存下来,一旦出现错误,可以根据血缘关系将数据源重新读取进行计算。RDD阶段划分:DAG有向无环图是由点和线组成的拓扑图形,该图形具有方向,不会闭环。相邻的两个RDD的关系称之为依赖关系,新的RDD依赖于旧的RDD,多个连续的RDD的依赖关系称之为血缘关系。
2025-06-13 19:28:17
365
原创 Spark闭包检测与Kryo序列化详解
从计算的角度,算子以外的代码都是在Driver端执行, 算子里面的代码都是在Executor端执行。那么在scala的函数时编程中,就会导致算子内经常会用到算子外的数据,这样就形成了闭包的效果,如果使用算子外的数据无法序列化,就意味着无法传值给Executor端执行,就会发生错误,所以需要在实现任务计算前,监测闭包内的对象是否可以进行序列化,这个操作我们称之为闭包检测。Java的序列化能够序列化任何的类。从计算的角度,算子以外的代码都是在Driver端执行,算子里面的代码都是在Executor端执行。
2025-06-12 19:43:44
595
原创 Spark RDD实战:8种WordCount实现详解
函数说明:分布式遍历RDD中的每一个元素,调用指定函数。函数说明:将数据保存到不同格式的文件中。
2025-06-11 20:20:26
294
原创 Spark RDD行动算子实战解析
函数说明:分区的数据通过初始值和分区内的数据进行聚合,然后再和初始值进行分区间的数据聚合。函数说明:聚集RDD中的所有元素,先聚合分区内数据,再聚合分区间数据。函数说明:折叠操作,aggregate的简化版操作。函数说明:统计每种key的个数。
2025-06-11 20:17:51
181
原创 Spark核心算子实战应用指南
函数说明:在类型为(K,V)和(K,W)的RDD上调用,返回一个key对应的所有元素连接在一起的(K,(V,W)))的RDD。函数说明:在类型为(K,V)和(K,W)的RDD上调用,返回一个(K,(Iterable,Iterable))类型的RDD。1. 获取原始数据: 时间戳,省份,城市,用户,广告。6. 将分组后的数据组内排序(降序),取前三名。5. 将转换结构后的数据根据省份进行分组。3. 将转换结构后的数据,进行分组聚合。函数说明:类似于SQL语句的左外连接。4. 将聚合的结构进行结构的转换。
2025-06-11 20:07:04
257
原创 Spark RDD转换算子:groupByKey与aggregateByKey详解
从shuffle的角度:reduceByKey和groupByKey都存在shuffle的操作,但是reduceByKey可以在shuffle前对分区内相同的key的数据进行预聚合(combine)功能,这样会减少落盘的数据量,而reduceByKey只是进行分组,不存在数据量减少的问题,reduceByKey性能比较高。GroupByKey只能分组,不能聚合,所以在分区聚合的场合下,推荐使用reduceByKey,如果仅仅是分组而不需要聚合。函数说明:将数据根据不同的规则进行分区内计算和分区间计算;
2025-06-11 20:00:56
594
原创 Spark核心算子:partitionBy与reduceByKey详解
函数说明:将数据按照指定Partitioner重新进行分区,Spark默认的分区器时HashPartitioner。函数说明:可以将数据按照相同的Key对Value进行聚合。如果重分区的分区器和当前RDD的分区器一样怎么办?如果想按照自己的方法进行数据分区怎么办?Spark还有其他分区器吗?
2025-06-11 19:56:35
229
原创 Spark RDD操作:交集、并集、差集与拉链详解
函数说明:将两个RDD中的元素,以键值对的形式进行合并。其中,键值对中的Key为第一个RDD中的元素,Value为第二个RDD中的相同位置的元素。函数说明:以一个RDD元素为主,去除两个RDD中重复元素,将其他元素保留下来。函数说明:对源RDD和参数RDD求交集后返回一个新的RDD。函数说明:对源RDD和参数RDD求并集后返回一个新的RDD。交集:如果两个RDD数据类型不一致怎么办?交集:intersection。差集:subtract。
2025-06-11 19:45:05
127
原创 Spark RDD算子:分区与分组操作解析
小功能:将List(“Hello”,“hive”,“hbase”,“Hadoop”)根据单词首写字母进行分组。小功能:从服务器日志数据apache.log中获取每个时间段访问量。
2025-06-10 20:52:30
189
原创 RDD转换算子:数据处理核心解析
RDD根据数据处理方式的不同将算子整体上分为Value类型、双Value类型、双Value类型和Key-Value类型。rdd的计算一个分区内的数据是一个一个执行逻辑。不同分区数据计算是无序的。
2025-06-09 20:40:37
168
原创 文件数据源
读取文件数据时,数据是按照Hadoop文件读取的规则进行切片分区,而切片规则和数据读取的规则有些差异。读取文件数据时,数据是按照Hadoop文件读取的规则进行切片分区,而切片规则和数据读取的规则有些差异。
2025-06-09 20:32:05
280
原创 集合数据源
默认情况下,Spark可以将一个作业切分多个任务后,发送给Executor节点并行计算,而能够并行计算的任务数量我们称之为并行度。这个数量可以在构建RDD时指定。记住,这里的并行执行的任务数量,并不是指的切分任务的数量。
2025-06-09 20:29:29
311
原创 揭秘Spark三大数据结构:RDD、累加器与广播变量
RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据处理模型。代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。Spark计算框架为了能够进行高并发和高吞吐的数据处理,封装了三大数据结构,用于处理不同的应用场景。广播变量:分布式共享只读变量。累加器:分布式共享只写变量。RDD:弹性分布式数据集。
2025-06-09 20:22:55
219
原创 csv表 导入hive数据表
(根据自己创建的表名和想查询的数字更改)LOCATION '/csv' -- 指向HDFS的CSV文件目录。hdfs dfs -put /本地文件目录 /上传hdfs目录。
2025-04-02 10:30:57
438
空空如也
win11安全中心打开不显示设备安全性的内容
2025-05-24
TA创建的收藏夹 TA关注的收藏夹
TA关注的人