spark推荐算法
⑴ 推荐系统UserCF和ItemCF
UserCF(User Collaboration Filter),又称 基于用户的协同过滤算法。
协同过滤:就是指众多的用户可以齐心协力,通过不断地和网站互动,使 自己的推荐列表能够不断过滤掉自己不感兴趣的物品,从而越来越满足自己的需求。
而基于用户是指通过分析用户对商品的行为(如浏览、收藏、加入购物车、购买……)计算出哪些用户是兴趣相似的,然后把兴趣相似的用户所关注的商品相互推荐。
举个例子:
由上表可以看出用户A和用户C比较相似,所以把用户A感兴趣的商品4推荐给用户C。
步骤一般分为两步:
再举个详细点的例子:
假设我们这么一些数据(用户(字母) 商品(数字)_行为,):
我们可以给不同的行为赋予不同的评分(假设浏览1分、收藏3分、加入购物车5分、购买10分),得到以下数据:
这样看着比较累,而且也不方便计算,可以把它转换为矩阵形式,称之为 评分矩阵 :
计算相似度
计算相似度的方式有很多,如余弦相似度、切比雪夫距离、欧里几得距离、曼哈顿距离、杰卡德距离、皮尔森系数……计算相似度的方式不同计算出来的相似度也不同。
这里只介绍余弦相似度,其他的请自行网络。
假设有二维向量a,b如下图所示
则他们的余弦相似度为
推广到多维向量a(a1,a2,a3,a4……),b(b1,b2,b3,b4……)
有了公式就能计算出用户相似度了:
推荐列表 = 相似度矩阵 X 评分矩阵
由于用户已经对推荐列表中的一些商品有过行为,所以还要把这些商品给滤除掉
得到最终的推荐列表,其数值代表的意义是用户对商品的感兴趣程度:
ItemCF(Item Collaboration Filter),又称 基于商品(物品)的协同过滤算法。
其原理与UserCF类似,是基于用户对商品的偏好找到相似的商品,然后推荐相似的商品品给他。
计算过程也非常相似,区别在于计算时把UserCF的 评分矩阵转置 ,再计算商品与商品之间的相似度得到 商品之间的相似度矩阵 。
最后的 推荐列表 = 商品之间的相似度矩阵 X 评分矩阵转置
对于电子商务,用户数量一般大大超过商品数量,此时Item CF的计算复杂度较低。
比如在购书网站上,当你看一本书的时候,推荐引擎会给你推荐相关的书籍,这个推荐的重要性进进超过了网站首页对该用户的综合推荐。可以看到,在这种情况下,Item CF 的推荐成为了引导用户浏览的重要手段。基于物品的协同过滤算法,是目前电子商务采用最广泛的推荐算法。
在非社交网络的网站中,内容内在的联系是很重要的推荐原则,它比基于相似用户的推荐原则更加有效。在社交网络站点中,User CF 是一个更好错的选择,User CF 加上社会网络信息,可以增加用户对推荐解释的信服程度。
推荐多样性和精度,各有千秋。
参考:
Spark基于用户的协同过滤算法 https://www.toutiao.com/a6498952374487368205/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=15393016323&utm_medium=toutiao_android
推荐系统_itemCF和userCF
http://blog.csdn.net/u011263983/article/details/51498458
⑵ spark和hadoop的区别
直接比较Hadoop和Spark有难度,因为它们处理的许多任务都一样,但是在一些方面又并不相互重叠。
比如说,Spark没有文件管理功能,因而必须依赖Hadoop分布式文件系统(HDFS)或另外某种解决方案。
Hadoop框架的主要模块包括如下:
Hadoop Common
Hadoop分布式文件系统(HDFS)
Hadoop YARN
Hadoop MapRece
分区列表
计算每个分片的函数
依赖其他RDD的项目列表
面向键值RDD的分区程序(比如说RDD是散列分区),这是可选属性
计算每个分片的首选位置的列表(比如HDFS文件的数据块位置),这是可选属性
虽然上述四个模块构成了Hadoop的核心,不过还有其他几个模块。这些模块包括:Ambari、Avro、Cassandra、Hive、 Pig、Oozie、Flume和Sqoop,它们进一步增强和扩展了Hadoop的功能。
Spark确实速度很快(最多比Hadoop MapRece快100倍)。Spark还可以执行批量处理,然而它真正擅长的是处理流工作负载、交互式查询和机器学习。
相比MapRece基于磁盘的批量处理引擎,Spark赖以成名之处是其数据实时处理功能。Spark与Hadoop及其模块兼容。实际上,在Hadoop的项目页面上,Spark就被列为是一个模块。
Spark有自己的页面,因为虽然它可以通过YARN(另一种资源协调者)在Hadoop集群中运行,但是它也有一种独立模式。它可以作为 Hadoop模块来运行,也可以作为独立解决方案来运行。
MapRece和Spark的主要区别在于,MapRece使用持久存储,而Spark使用弹性分布式数据集(RDDS)。
性能
Spark之所以如此快速,原因在于它在内存中处理一切数据。没错,它还可以使用磁盘来处理未全部装入到内存中的数据。
Spark的内存处理为来自多个来源的数据提供了近乎实时分析的功能:营销活动、机器学习、物联网传感器、日志监控、安全分析和社交媒体网站。另 外,MapRece使用批量处理,其实从来就不是为惊人的速度设计的。它的初衷是不断收集来自网站的信息,不需要这些数据具有实时性或近乎实时性。
易用性
支持Scala(原生语言)、Java、Python和Spark SQL。Spark SQL非常类似于SQL 92,所以几乎不需要经历一番学习,马上可以上手。
Spark还有一种交互模式,那样开发人员和用户都可以获得查询和其他操作的即时反馈。MapRece没有交互模式,不过有了Hive和Pig等附加模块,采用者使用MapRece来得容易一点。
成本
“Spark已证明在数据多达PB的情况下也轻松自如。它被用于在数量只有十分之一的机器上,对100TB数据进行排序的速度比Hadoop MapRece快3倍。”这一成绩让Spark成为2014年Daytona GraySort基准。
兼容性
MapRece和Spark相互兼容;MapRece通过JDBC和ODC兼容诸多数据源、文件格式和商业智能工具,Spark具有与MapRece同样的兼容性。
数据处理
MapRece是一种批量处理引擎。MapRece以顺序步骤来操作,先从集群读取数据,然后对数据执行操作,将结果写回到集群,从集群读 取更新后的数据,执行下一个数据操作,将那些结果写回到结果,依次类推。Spark执行类似的操作,不过是在内存中一步执行。它从集群读取数据后,对数据 执行操作,然后写回到集群。
Spark还包括自己的图形计算库GraphX。GraphX让用户可以查看与图形和集合同样的数据。用户还可以使用弹性分布式数据集(RDD),改变和联合图形,容错部分作了讨论。
容错
至于容错,MapRece和Spark从两个不同的方向来解决问题。MapRece使用TaskTracker节点,它为 JobTracker节点提供了心跳(heartbeat)。如果没有心跳,那么JobTracker节点重新调度所有将执行的操作和正在进行的操作,交 给另一个TaskTracker节点。这种方法在提供容错性方面很有效,可是会大大延长某些操作(即便只有一个故障)的完成时间。
Spark使用弹性分布式数据集(RDD),它们是容错集合,里面的数据元素可执行并行操作。RDD可以引用外部存储系统中的数据集,比如共享式文件系统、HDFS、HBase,或者提供Hadoop InputFormat的任何数据源。Spark可以用Hadoop支持的任何存储源创建RDD,包括本地文件系统,或前面所列的其中一种文件系统。
RDD拥有五个主要属性:
RDD可能具有持久性,以便将数据集缓存在内存中。这样一来,以后的操作大大加快,最多达10倍。Spark的缓存具有容错性,原因在于如果RDD的任何分区丢失,就会使用原始转换,自动重新计算。
可扩展性
按照定义,MapRece和Spark都可以使用HDFS来扩展。那么,Hadoop集群能变得多大呢?
据称雅虎有一套42000个节点组成的Hadoop集群,可以说扩展无极限。最大的已知Spark集群是8000个节点,不过随着大数据增多,预计集群规模也会随之变大,以便继续满足吞吐量方面的预期。
安全
Hadoop支持Kerberos身份验证,这管理起来有麻烦。然而,第三方厂商让企业组织能够充分利用活动目录Kerberos和LDAP用于身份验证。同样那些第三方厂商还为传输中数据和静态数据提供数据加密。
Hadoop分布式文件系统支持访问控制列表(ACL)和传统的文件权限模式。Hadoop为任务提交中的用户控制提供了服务级授权(Service Level Authorization),这确保客户拥有正确的权限。
Spark的安全性弱一点,目前只支持通过共享密钥(密码验证)的身份验证。Spark在安全方面带来的好处是,如果你在HDFS上运行Spark,它可以使用HDFS ACL和文件级权限。此外,Spark可以在YARN上运行,因而能够使用Kerberos身份验证。
总结
Spark与MapRece是一种相互共生的关系。Hadoop提供了Spark所没有的功能特性,比如分布式文件系统,而Spark 为需要它的那些数据集提供了实时内存处理。完美的大数据场景正是设计人员当初预想的那样:让Hadoop和Spark在同一个团队里面协同运行。
⑶ 有什么关于 Spark 的书推荐
《大数据Spark企业级实战》本书共包括14章,每章的主要内容如下。
第一章回答了为什么大型数据处理平台都要选择SPARK
。为什么spark如此之快?星火的理论基础是什么?spark如何使用专门的技术堆栈来解决大规模数据处理的需要?第二章回答了如何从头构建Hadoop集群的问题。
如何构建基于Hadoop集群的星火集群?如何测试火星的质量?附录从spark的角度解释了Scala,并详细解释了Scala函数编程和面向对象编程。
⑷ 《Spark大数据分析实战》epub下载在线阅读全文,求百度网盘云资源
《Spark大数据分析实战》(高彦杰/倪亚宇)电子书网盘下载免费在线阅读
链接: https://pan..com/s/1MyKNRhDaWb9FMUYESLDIcw
书名:Spark大数据分析实战
豆瓣评分:5.2
作者:高彦杰/倪亚宇
出版社:机械工业出版社
出版年:2016-1-1
页数:213
内容简介
本书一共11章:其中第1~3章,主要介绍了Spark的基本概念、编程模型、开发与部署的方法;第4~11章,详细详解了热点新闻分析系统、基于云平台的日志数据分析、情感分析系统、搜索引擎链接分析系统等的应用与算法等核心知识点。
作者简介
高彦杰,毕业于*国人民大学,就职于微软亚洲研究院。开源技术爱好者,对spark及其他开源大数据系统与技术有较为深入的认识和研究,实践经验丰富。较早接触并使用spark,对spark应用开发、spark系统的运维和测试比较熟悉.深度阅读了spark的源代码,了解spark的运行机制,擅长spark的查询优化。
曾着有畅销书《spark大数据处理:技术、应用与性能优化》。
倪亚宇,清华大学自动化系在读博士研究生,曾于微软亚洲研究院、IBM研究院实习。对大规模的推荐系统和机器学习算法有较为深入的研究和丰富的实践经验。
⑸ 在大数据学习中Hadoop和Spark哪个更好就业
大数据的hadoop和spark都是大数据开发所用到的一种开发软件工具,合格的大数据开发工程师需要掌握的技能很多,具体岗位(大数据开发,大数据分析,数据产品经理等)要求的重点不同。如需大数据培训推荐选择【达内教育】。
Hadoop与Spark都是大数据计算框架,但是两者各有自己的优势,Spark与Hadoop的区别主要有以下几点:
1、编程方式
Hadoop的MapRece在计算数据时,计算过程必须要转化为Map和Rece两个过程,从而难以描述复杂的数据处理过程;而Spark的计算模型不局限于Map和Rece操作,还提供了多种数据集的操作类型,编程模型比MapRece更加灵活。
2、数据存储
Hadoop的MapRece进行计算时,每次产生的中间结果都是存储在本地磁盘中;而Spark在计算时产生的中间结果存储在内存中。
3、数据处理
Hadoop在每次执行数据处理时,都需要从磁盘中加载数据,导致磁盘的I/O开销较大;而Spark在执行数据处理时,只需要将数据加载到内存中,之后直接在内存中加载中间结果数据集即可,减少了磁盘的1O开销等。感兴趣的话点击此处,免费学习一下
想了解更多有关大数据的相关信息,推荐咨询【达内教育】。该机构是引领行业的职业教育公司,致力于面向IT互联网行业培养人才,达内大型T专场招聘会每年定期举行,为学员搭建快捷高效的双选绿色通道,在提升学员的面试能力、积累面试经验同时也帮助不同技术方向的达内学员快速就业。达内IT培训机构,试听名额限时抢购。
⑹ Storm与Spark,Hadoop相比是否有优势
Storm优势就在于Storm是实时的连续性的分布式的计算框架,一旦运行起来,除非你将它杀掉,否则它一直处理计算或等待计算的状态.Spark和hadoop都做不到.
当然它们各自都有其应用场景,各有各的优势.可以配合使用.
下面我转一份别人的资料,讲的很清楚.
Storm与Spark、Hadoop这三种框架,各有各的优点,每个框架都有自己的最佳应用场景。
所以,在不同的应用场景下,应该选择不同的框架。
Storm是最佳的流式计算框架,Storm由Java和Clojure写成,Storm的优点是全内存计算,所以它的定位是分布式实时计算系统,按照Storm作者的说法,Storm对于实时计算的意义类似于Hadoop对于批处理的意义。
Storm的适用场景:
1)流数据处理
Storm可以用来处理源源不断流进来的消息,处理之后将结果写入到某个存储中去。
2)分布式RPC。由于Storm的处理组件是分布式的,而且处理延迟极低,所以可以作为一个通用的分布式RPC框架来使用。
SparkSpark是一个基于内存计算的开源集群计算系统,目的是更快速的进行数据分析。Spark由加州伯克利大学AMP实验室Matei为主的小团队使用Scala开发开发,类似于Hadoop MapRece的通用并行计算框架,Spark基于Map Rece算法实现的分布式计算,拥有Hadoop MapRece所具有的优点,但不同于MapRece的是Job中间输出和结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的Map Rece的算法。
Spark的适用场景:
1)多次操作特定数据集的应用场合
Spark是基于内存的迭代计算框架,适用于需要多次操作特定数据集的应用场合。需要反复操作的次数越多,所需读取的数据量越大,受益越大,数据量小但是计算密集度较大的场合,受益就相对较小。
2)粗粒度更新状态的应用
由于RDD的特性,Spark不适用那种异步细粒度更新状态的应用,例如Web服务的存储或者是增量的Web爬虫和索引。就是对于那种增量修改的应用模型不适合。
总的来说Spark的适用面比较广泛且比较通用。
Hadoop是实现了MapRece的思想,将数据切片计算来处理大量的离线数据数据。Hadoop处理的数据必须是已经存放在HDFS上或者类似HBase的数据库中,所以Hadoop实现的时候是通过移动计算到这些存放数据的机器上来提高效率。
Hadoop的适用场景:
1)海量数据的离线分析处理
2)大规模Web信息搜索
3)数据密集型并行计算
简单来说:
Hadoop适合于离线的批量数据处理适用于对实时性要求极低的场景
Storm适合于实时流数据处理,实时性方面做得极好
Spark是内存分布式计算框架,试图吞并Hadoop的Map-Rece批处理框架和Storm的流处理框架,但是Spark已经做得很不错了,批处理方面性能优于Map-Rece,但是流处理目前还是弱于Storm,产品仍在改进之中
⑺ 《Spark机器学习》pdf下载在线阅读全文,求百度网盘云资源
《Spark机器学习》网络网盘pdf最新全集下载:
链接: https://pan..com/s/1kiagkVpdB5pvRoSyg-VOOg
简介:《Spark机器学习》每章都设计了案例研究,以机器学习算法为主线,结合实例探讨了Spark 的实际应用。书中没有让人抓狂的数据公式,而是从准备和正确认识数据开始讲起,全面涵盖了推荐系统、回归、聚类、降维等经典的机器学习算法及其实际应用。
⑻ Spark核心-RDD
RDD是Spark中的数据抽象,全称 弹性分布式数据集(Resilient Distributed Datasets) 。RDD可以理解为将一个大的数据集合以分布式的形式保存在集群服务器的内存中。RDD是一个容错的、并行的数据结构,可以让用户显式地将数据存储到磁盘和内存中,并能控制数据的分区。
RDD是Spark的核心,也是整个Spark的架构基础。
RDD的特点:
RDD的5个主要属性:
可以通过两种方式创建RDD:
转换操作指的是在原RDD实例上进行计算,然后创建一个新的RDD实例。
RDD中的所有的转换操作都是 惰性 的,在执行RDD的转换操作的时候,并不会直接计算结果,而是记住这些应用到基础数据集上的转换动作,只有行动操作时,这些转换才会真正的去执行。这样设计的好处是更加有效率的运行。
行动操作指的是向驱动器程序返回结果或把结果写入外部系统的操作。
Spark在调用RDD的行动操作的时候,会触发Spark中的连锁反应。当调用的行动操作的时候,Spark会尝试创建作为调用者的RDD。如果这个RDD是从文件中创建的,那么Spark会在worker节点上读取文件至内存中。如果这个RDD是通过其他RDD的转换得到的,Spark会尝试创建其父RDD。这个过程会一直持续下去,直到Spark找到根RDD。然后Spark就会真正执行这些生成RDD所必须的转换计算。最后完成行动操作,将结果返回给驱动程序或者写入外部存储。
Spark速度非常快的原因之一,就是在不同操作中在内存中持久化一个数据集。当持久化一个RDD后,每一个节点都将把计算的分片结果保存在内存中,并在对此数据集进行的其他动作中重用。这使得后续的动作变得更加迅速。缓存是Spark构建迭代算法和快速交互式查询的关键。所以我们在开发过程中,对经常使用的RDD要进行缓存操作,以提升程序运行效率。
RDD缓存的方法
RDD类提供了两种缓存方法:
cache方法其实是将RDD存储在集群中Worker的内存中。
persist是一个通用的cache方法。它可以将RDD存储在内存中或硬盘上或者二者皆有。
缓存的容错
缓存是有可能丢失(如机器宕机),或者存储于内存的数据由于内存不足而被删除。RDD的缓存的容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列的转换,丢失的数据会被重新计算。因为RDD的各个Partition是相对独立的,所以在重新计算的时候只需要计算丢失部分Partition即可,不需要重新计算全部的Partition。因此,在一个缓存RDD的节点出现故障的时候,Spark会在另外的节点上自动重新创建出现故障的节点中存储的分区。
RDD的缓存能够在第一次计算完成后,将计算结果保存到内存、本地文件系统或者Tachyon中。通过缓存,Spark避免了RDD上的重复计算,能够极大地提升计算速度。但是,如果缓存丢失了,则需要重新计算。如果计算特别复杂或者计算特别耗时,那么缓存丢失对于整个Job的影响是不容忽视的。为了避免缓存丢失重新计算带来的开销,所以Spark引入了检查点(checkpoint)机制。
缓存是在计算结束后,直接将计算结果通过用户定义的存储级别写入不同的介质。而检查点不同,它是在计算完成后,重新建立一个Job来计算。所以为了避免重复计算,推荐先将RDD缓存,这样在进行检查点操作时就可以快速完成。
Spark会根据用户提交的计算逻辑中的RDD的转换和动作来生动RDD之间的依赖关系,同时这个计算链也就生成了逻辑上的DAG。
RDD之间的依赖关系包括:
Spark中的依赖关系主要体现为两种形式: