自定义博客皮肤VIP专享

*博客头图:

格式为PNG、JPG,宽度*高度大于1920*100像素,不超过2MB,主视觉建议放在右侧,请参照线上博客头图

请上传大于1920*100像素的图片!

博客底图:

图片格式为PNG、JPG,不超过1MB,可上下左右平铺至整个背景

栏目图:

图片格式为PNG、JPG,图片宽度*高度为300*38像素,不超过0.5MB

主标题颜色:

RGB颜色,例如:#AFAFAF

Hover:

RGB颜色,例如:#AFAFAF

副标题颜色:

RGB颜色,例如:#AFAFAF

自定义博客皮肤

-+

啊李

python

  • 博客(79)
  • 收藏
  • 关注

原创 CoGroupRDD原理-源码(spark3.0)

这个类中有三个重要的方法:1:getDependencies:获取每个rdd的依赖,遍历rdds根据每个rdd的分区器rdd.partitioner=Some(part) 则返回newOneToOneDependency() 宰依赖否则返回newShuffleDependency() 宽依赖2:getPartitions:获取分区器,如果是宽依赖则返回None,否则返回newNarrowCoGroupSplitDep3:compute:这个方法最后返回Iterat...

2021-09-02 13:55:47 473

原创 Union 原理-源码(spark3.0)

这也是一个action算子,并且不会发生shuffle。首先会将多个上游的RDD放入到一个集合中,或获取所有RDD的分区,判断是否都定义了分区并且分区是一样的,如果是则返回PartitionerAwareUnionRDD,否则返回UnionRDD;PartitionerAwareUnionRDD 是oneToOneDependency是一个宰依赖,会使用父RDD的分区器UnionRDD中会判断RDD的个数是否超过了10个,没超过类似于合并了下分区,这个是自...

2021-09-02 11:30:33 365

原创 foreach、foreachPartition原理-源码(spark3.0)

foreach 将RDD中每个分区的迭代器中每个元素都调用这个函数 /** * Applies a function f to all elements of this RDD. */ def foreach(f: T => Unit): Unit = withScope { val cleanF = sc.clean(f) sc.runJob(this, (iter: Iterator[T]) => iter.foreach(clea...

2021-09-02 08:53:05 332

原创 saveAsTextFile原理-源码(spark3.0)

用mapPartitions函数将数据封装成Text(hadoop的数据类型),返回的是MapPartitionRDD,在调用SaveAsHadoopFile/** * TODO:存储数据到文件中 并指定压缩格式 * Save this RDD as a compressed text file, using string representations of elements. */ def saveAsTextFile(path: String, codec: ...

2021-09-02 08:52:37 412

原创 countByKey、countByValue原理-源码(spark3.0)

CountByKey 因为代码中调用了collect,所以是action算子 将(key,value)转换成了(key,1) 然后调用了reduceByKey->collect->toMap PairRDDFunctions类\ /** * TODO:统计每个不同的key的个数 * Count the number of elements for each key, collecting the results to a local ...

2021-09-01 20:09:33 195

原创 count 原理-源码(spark3.0)

先对各个分区的迭代器计数,然后sum /** * Return the number of elements in the RDD. */ /** * TODO: 可以看出 是对每个分区计算 计算这个分区后直接将这个分区的结果 * 发送到Driver端,在driver端在对分区的结果进行就算 汇总 * @return */ def count(): Long = sc.runJob(this, Utils.getIteratorSize _).su...

2021-09-01 19:54:51 272

原创 fold 、sum原理-源码(spark3.0)

fold 是一个action算子,也是使用了局部聚合然后在全局汇总,调用了TraversableOnce.foldLeft方法/** * Aggregate the elements of each partition, and then the results for all the partitions, using a * given associative function and a neutral "zero value". The function ...

2021-09-01 19:52:23 225

原创 reduce原理-源码(spark3.0)

是一个action算子,在这个方法里面调用了sc.runJob; 这个方法中定义了两个函数一个是局部聚合函数一个是全局聚合函数(merge分区的结果的),局部聚合函数中调用了TraverableOnce.reduceLft方法/** * Reduces the elements of this RDD using the specified commutative and * associative binary operator. */ def re...

2021-09-01 19:41:32 164

原创 first、top 原理-源码(spark3.0)

first 底层调用的take(1)/** * Return the first element in this RDD. */ def first(): T = withScope { take(1) match { case Array(t) => t case _ => throw new UnsupportedOperationException("empty collection") } }top...

2021-09-01 19:31:52 190

原创 takeSample原理-源码(spark3.0)

这也是一个action算子,但是触发的action>=2,第一次是:countI() 获取数据总量,第二次是:collect() ...如果不满足会执行whlie循环再次执行this.sample().collect 所有action触发的次数>=2.这个方法中有三个参数:参数1:withReplace:抽样的时候应该是否放回,会根据这个采用不同抽样器计算概率,如果是true会采用PoissonBounds抽样器,false会采用BiunomialBounds采样器...

2021-09-01 19:03:35 234

原创 TakeOrdered原理-源码(spark3.0)

是一个action算子,内部调用了reduce算子,这个算子里面调用了runJob 会调用mapPartitions算子计算每个分区的数据迭代器,里面是使用BoundedPriorityQueye有界小顶堆队列存储的,存量为num即只会回去每个分区的前num个数据。mapPartitions算子返回newMapPartitionsRDD。返回结果调用reduce算子,将各个分区返回的queue进行合并,合并成一个队列,返回数组/** * TODO:返回最小的nu...

2021-09-01 17:11:19 135

原创 Take 原理-源码(spark3.0)

take方法中有一个while循环,在首次循环中,会启动一个job来获取第一个分区的数据,如果第一个分区的数据已经满足了条件直接返回数组,如果第一个分区不满足条件,那么会再次循环;会通过partsScanned(会记录已经执行的分区数) 和RDD_LIMIT_SCALE_UP_FACTOR两个参数决定下次执行job会遍历哪些分区/** * Take the first num elements of the RDD. It works by first scanning on...

2021-09-01 16:50:46 212

原创 Collect原理-源码分析(spark3.0)

这个是action算子会触发job操作,会将RDD中每个分区的数据都返回,拼接成一个数组,返回到driver端。是将这个RDD中的每个分区的数据迭代器iterator的数据直接转换成数组,然后所有的分区中的数据(数组) 组成一个大的数组,数组中元素为数组,然后调用Arrays.concat()方法将数据展平,即数组中的元素为真实的数据不再是数组RDD类:/** * Return an array that contains all of the elements in this...

2021-09-01 15:48:47 213

原创 yarn 下cluster和client异同点-源码级别

Spark-submit部署模式 本地模式local[*]、standalone模式、yarn模式;对于standalone模式和yarn模式分为:client(客户端)和cluster(集群) 提交方式Client模式和cluster模式区别 主要的区别是driver运行的节点;使用deploy-modeclient/cluster来指定运行的模式client模式(yarn) 1:在本地机器提交jar,即spark-submit命令,然后在本地...

2021-09-01 15:00:41 118

原创 MySql密码忘掉登陆方式

亲测有效:MySQl密码忘掉登陆方式: 1:以管理员权限登陆cmd,停止mysql cmd->net stop mysql 2: 使用无验证的方式登陆,mysqld --skip-grant-tables 3: 打开新的cmd窗口(这个可以不用管理员权限),直接输入mysql回车就可以登陆 4:使用mysql: use mysql; ...

2019-05-21 14:58:57 345

原创 Collection和Map

集合Collection(接口): List(接口): ArrayList:底层是数组,是非线程安全的 查找块,增删慢 LinkedList:底层是链表是非线程安全的 查找慢,增删块 Vector:底层是数组,是线程安全的 ...

2019-05-19 13:21:50 995

原创 java类继承多态等知识点

封装 继承 多态: 封装: 用private修饰的成员变量可以看做是进行了封装 继承: 可以继承类,抽线类 接口 单继承,多实现接口 子类继承不了父类中使用private修饰的变量,方法 多态: 多态的前提: 有继承 有...

2019-05-19 13:16:51 325

原创 String_StringBuffer_StringBuilder

String: 长度和内容是不可变的 是非线程安全的StringBuffer: 长度和内容是可变的 是线程安全的,效率低StringBuilder: 长度和内内容是可变的 是非线程安全的。效率相对高...

2019-05-19 13:13:21 116

原创 对文件的操作知识点(java)

读取和写入文件: File file = new File("")是用来封装文件的 字节流: 基础流: 输入: FileIntputStream: 方式1 FileInputStream fileInputSTream = new FileImage...

2019-05-19 13:12:34 224

转载 特征选择

https://blog.csdn.net/u012328159/article/details/53954522特征选择(feature selection)特征选择 feature selection 终于有时间把好久之前就想写的关于特征选择的基本介绍补上来了,主要想从以下几个方面介绍: - 特征选择的动机–为什么要特征选择 - 常见的特征选择方法–如何特征选择 - 特征选...

2018-08-20 15:41:23 2607

原创 常见的排序python实现

#时间复杂度o(n**2) 空间复杂度o(1)#思路后面的元素插入前面已经排序好的序列里,稳定1.插入排序—直接插入排序(Straight Insertion Sort)基本思想:将一个记录插入到已排序好的有序表中,从而得到一个新,记录数增1的有序表。即:先将序列的第1个记录看成是一个有序的子序列,然后从第2个记录逐个进行插入,直至整个序列有序为止。要点:设立哨兵,作为临时存...

2018-08-18 19:13:11 426

转载 EM算法详解

另一篇感觉也挺好https://blog.csdn.net/baimafujinji/article/details/50626149 

2018-08-12 11:28:03 237

原创 LTSM循环神经网络详解

根据https://blog.csdn.net/shijing_0214/article/details/52081301/https://www.cnblogs.com/azheng333/p/5908025.html理解写的,字不好望别喷0.0 ,只是为了以后用到看 LSTM的原图示意图    ...

2018-08-11 16:39:58 946

原创 ICA的核心思想

ICA的核心思想:设X是观测到的数据,S(为未知)为信号源,则一定存在矩阵A(未知)使得X = AS那吗我们要预测信号源为Y,求解W使得Y = WX (y为我们要预测的信号员)则Y = WAS要想Y无限的靠近S真实的信号源,则A就必须等价于W的逆矩阵,而且W.T.dot(W) = 1,即W有正交单位向量组成的矩阵,即:我们找到W就可以了,找到W就能求出信号源了。下面求解W的思路:由Y = WX 因...

2018-07-16 11:29:51 707

转载 set集合的& | ^

data1 = {(1,2),(1,3),(2,3)}data2 = {(1,2),(1,5),(2,3)}print(data1&data2) #数学中的交集print(data1|data2) #数学中额并集print(data1^data2) #取出各自独有的'''{(1, 2), (2, 3)}{(1, 2), (1, 5), (1, 3), (2, 3)}{(1,...

2018-07-15 09:28:24 439

转载 DBSCAN算法

  DBSCAN(Density-Based Spatial Clustering of Applications with Noise)是一个比较有代表性的基于密度的聚类算法。与划分和层次聚类方法不同,它将簇定义为密度相连的点的最大集合,能够把具有足够高密度的区域划分为簇,并可在噪声的空间数据库中发现任意形状的聚类。DBSCAN中的几个定义:Ε邻域:给定对象半径为Ε内的区域称为该对象的Ε邻域;核...

2018-07-15 08:35:29 8371

转载 FP-growth算法 and python实现

1.概述  FP-growth算法是基于Apriori原理的,通过将数据集存储在FP(Frequent Pattern)树上发现频繁项集,但不能发现数据之间的关联规则。FP-growth算法只需要对数据库进行两次扫描,而Apriori算法在求每个潜在的频繁项集时都需要扫描一次数据集,所以说Apriori算法是高效的。其中算法发现频繁项集的过程是:(1)构建FP树;(2)从FP树中挖掘频繁项集。2....

2018-07-14 16:05:31 516

原创 map函数的双层for循环

data = [[1, 3, 4], [2, 3, 5], [1, 2, 3, 5], [2, 5]]C = [[1],[2],[4]]data = map(set,data)C1 = map(set,C)for d in data: for c in C1: print(c)#只会循环第一个for一次输出 应该是map函数的原因'''{1}{2}{4}...

2018-07-13 16:07:12 3878

原创 四种抽样方法

#简单的随机抽样 随机的抽取200个,因为loadtxt读取的类型为张量,sample无法读取,所以用下面的行驶def rand_sample(file): data = np.loadtxt(file) num_sample = len(data) indexs = list(range(num_sample)) rand_index = random.samp...

2018-07-12 23:03:31 6886

原创 数据预处理11条

import pandas as pdimport numpy as npfrom sklearn.preprocessing import Imputer #数据预处理的函数#缺失值处理np.random.seed(8)df = pd.DataFrame(np.random.randn(6,4),columns = ['col1','col2','col3','col4'])df...

2018-07-12 11:33:56 228

原创 爬楼梯

楼梯有n阶,每次只能走1阶或两阶,编程实现#逆向递归num = 10def stairs_top_to_bottom(count): rand = np.random.choice([1,2]) if count ==num - 1 or count ==num: print(num - count,'last',end = ' ') else: ...

2018-07-11 11:12:53 89

原创 sorted排序

import operator#几个输出是一样的 key 后面接的是函数 data 是要排的数据data = [(1,99),(2,77),(3,9),(4,46),(5,12),(6,8)]ss = sorted(data,key = lambda jj:jj[0],reverse = True)print(ss)#[(6, 8), (5, 12), (4, 46), (3, 9)...

2018-07-05 12:55:21 450

转载 逻辑与或非

#转载链接 https://blog.csdn.net/JNingWei/article/details/78651535np.logical_and (逻辑与)Syntaxnp.logical_and(x1, x2, *args, **kwargs)Test>>> np.logical_and(True, False)False>>> np.logical...

2018-07-05 11:13:36 1199

原创 cov与corrcoef的区别

def loadData(): return [[1,1,1,0,0], [2,2,2,0,0], [1,1,1,0,0], [5,5,5,0,0], [1,1,0,2,2], [0,0,0,3,3], [0,0,0,1,1]]data = ma...

2018-07-05 10:59:27 3999

转载 yield的使用

WeiboGoogle+用电子邮件发送本页面 22您可能听说过,带有 yield 的函数在 Python 中被称之为 generator(生成器),何谓 generator ?我们先抛开 generator,以一个常见的编程题目来展示 yield 的概念。如何生成斐波那契數列斐波那契(Fibonacci)數列是一个非常简单的递归数列,除第一个和第二个数外,任意一个数都可由前两个数相加得到。用计算机...

2018-07-05 09:28:40 105

原创 nonzeros和isnan的结合

import numpy as npfrom numpy import *data = mat([[1,2,5,6,NaN], [4,NaN,1,4,5], [1,5,NaN,5,9], [1,2,5,6,4], [NaN,4,5,6,2]])print(data[:,1].A) #求解的为所...

2018-07-04 16:54:58 227

原创 递归

string = 'adfdvsvvvvdffsb'length = len(string)def rev(i): if i == length - 1: print(string[i],end = '') else: rev(i+1) print(string[i],end = '')rev(0) #先自行最后一个,在往前执...

2018-07-03 21:39:05 116

转载 使用Apriori算法和FP-growth算法进行关联分析

系列文章:《机器学习实战》学习笔记最近看了《机器学习实战》中的第11章(使用Apriori算法进行关联分析)和第12章(使用FP-growth算法来高效发现频繁项集)。正如章节标题所示,这两章讲了无监督机器学习方法中的关联分析问题。关联分析可以用于回答"哪些商品经常被同时购买?"之类的问题。书中举了一些关联分析的例子:通过查看哪些商品经常在一起购买,可以帮助商店了解用户的购买行为。这种从数据海洋中...

2018-07-03 09:54:36 1134

转载 GBDT算法详解

https://blog.csdn.net/u012684933/article/details/51088609https://www.cnblogs.com/ModifyRong/p/7744987.html算法介绍GBDT是希望组合一组弱的学习器的线性组合,即有:                                   上述公式中pmpm表示步长,我们可以...

2018-07-02 22:02:18 1945

原创 列表索引越界or空

data = [1,8,5,9,7,4,5]print(data[10:]) #返回空print(data[10]) #出错,越界

2018-07-02 16:27:55 1376 1

空空如也

空空如也

TA创建的收藏夹 TA关注的收藏夹

TA关注的人

提示
确定要删除当前文章?
取消 删除