通常来说,使用Spark-Streaming做无状态的流式计算是很方便的,每个batch时间间隔内仅需要计算当前时间间隔的数据即可,不需要关注之前的状态。但是很多时候,我们需要对一些数据做跨周期的统计,例如我们需要统计一个小时内每个用户的行为,我们定义的计算间隔(batch-duration)肯定会比一个小时小,一般是数十秒到几分钟左右,每个batch的计算都要更新最近一小时的用户行为,所以需要在整个计算过程中维护一个状态来保存近一个小时的用户行为。在Spark-1.6以前,可以通过updateStateByKey
操作实现有状态的流式计算,从spark-1.6开始,新增了mapWithState
操作,引入了一种新的流式状态管理机制。
机器学习套路--朴素贝叶斯
朴素贝叶斯(NaiveBayes)是基于贝叶斯定理与特征条件独立假设的一种分类方法,常用于文档分类、垃圾邮件分类等应用场景。其基本思想是,对于给定的训练集,基于特征条件独立的假设,学习输入输出的联合概率分布,然后根据贝叶斯定理,对给定的预测数据,预测其类别为后验概率最大的类别。
PySpark 的背后原理
Spark主要是由Scala语言开发,为了方便和其他系统集成而不引入scala相关依赖,部分实现使用Java语言开发,例如External Shuffle Service等。总体来说,Spark是由JVM语言实现,会运行在JVM中。然而,Spark除了提供Scala/Java开发接口外,还提供了Python、R等语言的开发接口,为了保证Spark核心实现的独立性,Spark仅在外围做包装,实现对不同语言的开发支持,本文主要介绍Python Spark的实现原理,剖析pyspark应用程序是如何运行起来的。
机器学习套路--协同过滤推荐ALS
如今,协同过滤推荐(CollaboratIve Filtering)技术已广泛应用于各类推荐系统中,其通常分为两类,一种是基于用户的协同过滤算法(User-Based CF),它是根据用户对物品的历史评价数据(如,喜欢、点击、购买等),计算不同用户之间的相似度,在有相同喜好的用户间进行物品推荐,例如将跟我有相同电影爱好的人看过的电影推荐给我;另一种是基于物品的协同过滤算法(Item-Based CF),它是根据用户对物品的历史评价数据,计算物品之间的相似度,用户如果喜欢A物品,那么可以给用户推荐跟A物品相似的其他物品,例如如果我们在购物网站上买过尿片,第二天你再到购物网站上浏览时,可能会被推荐奶瓶。
机器学习套路--逻辑回归
逻辑回归常用于解决二分类问题,它将具有 $n$ 维特征的样本 $X$,经过线性加权后,通过 $sigmoid$ 函数转换得到一个概率值 $y$,预测时根据一个门限 $threshold$ (例如0.5)来划分类别,$y < threshold$ 为负类,$y \geq threshold$ 为正类。