2020-09-03- 第十三周学习总结

用户头像
路易斯李李李
关注
发布于: 2020 年 09 月 06 日

1 Spark

1.1 Spark特点(Spark为什么这么快)



  • DAG(Directed Acyclic Graph有向无环图) 切分的多阶段计算过程更快速,Hadoop是使用Map和Reduce两部分进行计算,每次计算场景都要启动一次MapReduce(每次Join操作都是一次),Spark编程更简单

  • 使用内存存储中间计算结果更高效,Hadoop依赖磁盘操作,没有Spark在内存中计算快。

  • RDD (Resilient Distributed DataSet,弹性分布式数据集)的编程模型更简单

1.2 RDD,弹性分布式数据集



RDD是Spark的核心概念,是弹性分布式数据集(Resilient Distributed DataSets)的缩写。RDD既是Spark面向开发者的编程模型,又是Spark自身架构的核心元素。

作为Spark编程模型的RDD。MapReduce针对输入数据,将计算过程分为两个阶段,一个Map阶段,一个Reduce阶段,可以理解成是面向过程的大数据计算。我们在用MapReduce编程的时候,思考的是,如何将计算逻辑用Map和Reduce两个阶段实现,map和reduce函数的输入和输出是什么,MapReduce是面向过程的。

而Spark则直接针对数据进行编程,将大规模数据集合抽象成一个RDD对象,然后在这个RDD上进行各种计算处理,得到一个新的RDD,继续i计算处理,直到得到最后的结果数据。所以Spark可以理解成事面向对象的大数据计算。我们在进行Spark编程的时候,思考的是一个RDD对象需要经过什么样的操作,转换成另一个RDD对象,思考的重心和落脚点都在RDD上。



1.3 Spark WorkCount编程示例

val textFile = sc.textFile("hdfs://...")
val counts = textFile.flatMap(line => line.split(" "))
.map(word => (word, 1))
.reduceByKey(_+_)
counts.saveAsTextFile("hdfs://...")

第1行代码:根据HDFS路径生成一个输入数据RDD。

第2行代码:在输入数据RDD上执行3个操作,得到一个新的RDD。

  • 将输入数据的每一行文本用空格拆分成单词。

  • 将每个单词进行转换,word => (word, 1),生成新的结构

  • 相同的key进行统计,统计方式是对Value求和

第3行代码:将这个RDD保存到HDFS。

以上代码中,第2行代码实际上进行了3次RDD转换,每次转换都得到一个新的RDD,因为新的RDD可以继续调用RDD的转换函数,所以连续写成一行代码。

RDD上定义的函数分两种,

  • 转换(Transformation)函数,这种函数的返回值还是RDD;

  • 执行(Action)函数,这种函数不再返回RDD。



窄依赖不产生新分片,宽依赖产生新的分片。



1.4 Spark的作业和计算



Spark根据应用的复杂程度,将整个DAG分割成一个个的Stage阶段,每个阶段都包含了一些计算任务。根据DAG之间的依赖关系进行编程计算最终得到结果。

Spark里面的RDD函数有两种,一种是转换函数,调用以后得到的还是一个RDD,RDD的计算逻辑主要通过转换函数完成。另一种是action函数,调用以后不再返回RDD。比如count()函数,返回RDD中数据元素的个数。RDD里每个数据分片,Spark都会创建一个计算任务去处理,所以一个计算阶段会包含很多个计算任务(task)。

是否要生成新的数据分片,要看计算阶段是否需要进行shuffle操作,需要进行shuffle的则会产生新的分片。

1.5 Spark的部署方案



Spark支持Standalone、Yarn、Mesos、Kubernetes等多种部署方案,几种方案原理也都一样,只是不同组件角色命名不同,但是核心功能和运行流程都差不多。

1.6 流计算 Spark Streaming

批处理计算,速度足够快,则就能够看作流计算。Spark Streaming 负责将数据分割成一批一批的小数据,之后进入Spark Engine中进行处理计算。Flink流计算与Spark Streaming类似。Storm则是真正的实时计算,但吞吐量不如Spark Streaming。

2 大数据可视化

数据大屏展示,仅使用简单的统计分析即可快速得到大数据可视化系统。

2.1 互联网运营常用数据指标



(1)新增用户:网站增长性的关键指标,不同系统其统计方式也有所不同。有的根据设备ID、有的则根据用户ID,需要根据业务场景进行统计。

(2)用户留存率:网站运营一段时间后依然没有流失的用户被称作留存用户。用户留存率=留存用户数/当期新增用户数。用户流失率=1-用户留存率。

(3)活跃用户数:注册并打开使用,根据统计口径不同,有日活跃用户、月活跃用户等。

(4)PV:Page View,用户每次点击,每个页面跳转,被称作一个PV(Page View)。

(5)GMV:成交总金额(Gross Merchandise Volume),是电商网站统计营业额(流水)。

(6)转化率:电商网站中产生购买行为的用户与访问用户之比。



数据的可视化可通过折线图、散点图、热力图、漏斗图等进行UI展示。



3 大数据算法与机器学习

3.1 Google 网页排名算法PageRank

PageRank算法根据页面链接作为投票方法,并进行一定轮次的投票,每一轮投票都会根据上一轮的等级以及其相关页面的权重得到本轮的等级,最终经过N轮后,每个页面的值不再大幅度变化为止,此时便是该页面的等级值。计算公式如下图,其中d为在浏览A页面时跳转到其他页面的概率,通常为0.85;N为所有页面个数;C(T)则代表T页面中包含页面链接的个数。



比如先有4个页面A、B、C和D,我们可以通过以下步骤来分别确定每个页面的等级值。设置



(1)初始化PR(A)=PR(B)=PR(C)=PR(D) = 1,即将每个页面初始等级设置为1。

(2)开始当前轮次投票,则PR(A)=(1-d)/4 + d(PR(B)/C(B) + PR(C)/C(C) + PR(D)/C(D))。即如果当前是第一轮投票,则PR(A) = (1 - 0.85) / 4 + 0.85 * (1 / C(B) + 1/ C(C) + 1/C(D)),其中d设置为0.85,由于是第一轮,所以每个页面的PR值都为1,然后根据不同的权重最终得到这一轮的A页面的PR值。

(3)循环其他三个页面,按照步骤(2)中的方法计算每个页面当前轮次的PR值。

(4)如果递归轮次超过上限M,则执行完毕。否则回到步骤(2),计算下一轮的PR值。



3.2 KNN分类算法



KNN算法,也叫K近邻算法(K Nearest Neighbour)对于一个需要分类的数据,将其和一组已经分类标注好的样本集合进行比较,得到距离最近的K的样本,K个样本最多归属的类别,就是这个需要分类数据的类别。

3.3 提取文本的特征值TF-IDF算法



TF是词频(Term Frequency),表示某个单词在文档中出现的频率。 TF = 某个词在文档中出现的次数/文档总次词数。

IDF是逆文档频率(Inverse Document Frequency),表示这个单词在所有文档中的稀缺程度。IDF=log(所有的文档总数/出现该词的文档数)

TF-IDF = TF * IDF

3.4 推荐引擎算法

基于人口统计的推荐:根据人口的性别、年龄等属性进行分类推荐。

基于商品属性的推荐:根据商品的属性进行分类并推荐。

基于用户的协同过滤推荐:根据用户的喜好进行分类推荐。

基于商品的协同过滤推荐



用户头像

路易斯李李李

关注

还未添加个人签名 2020.05.11 加入

还未添加个人简介

评论

发布
暂无评论
2020-09-03-第十三周学习总结