版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Linux系统与大数据应用10大数据应用与案例第章本章内容10.1Mahout数据挖掘10.2Hadoop应用案例:Worldcount词频统计案例10.3Spark应用案例:spark进行电商数据检索10.4本章小结10.1Mahout数据挖掘ApacheMahout是一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序。经典算法包括聚类、分类、协同过滤、进化编程等等,并且,在Mahout的最近版本中还加入了对ApacheHadoop的支持,使这些算法可以更高效的运行在云计算环境中。Mahout是一个很强大的数据挖掘工具,是一个分布式机器学习算法的集合,包括:被称为Taste的分布式协同过滤的实现、分类、聚类等。Mahout最大的优点就是基于hadoop实现,把很多以前运行于单机上的算法,转化为了MapReduce模式,这样大大提升了算法可处理的数据量和处理性能。一、Mahout安装1、下载Mahout/dist/mahout/2、解压(如图10-1)tar-zxvfmahout-distribution-0.9.tar.gz10.1.1Mahout安装和配置10.1.1Mahout安装和配置图10-1解压3、配置环境变量(1)配置Mahout环境变量(如图10-2)#setmahoutenvironmentexportMAHOUT_HOME=/user/mahoutexportMAHOUT_CONF_DIR=$MAHOUT_HOME/confexportPATH=$MAHOUT_HOME/conf:$MAHOUT_HOME/bin:$PATH图10-2Mahout环境变量10.1.1Mahout安装和配置(2)配置Mahout所需的Hadoop环境变量#sethadoopenvironmentexportHADOOP_HOME=/user/hadoopexportHADOOP_CONF_DIR=$HADOOP_HOME/confexportPATH=$PATH:$HADOOP_HOME/binexportHADOOP_HOME_WARN_SUPPRESS=not_null下图10-3,是在实例中的环境配置:图10-3Hadoop环境变量10.1.1Mahout安装和配置4、验证运行mahout,如果出现以下结果说明配置正确。图10-4验证10.1.1Mahout安装和配置10.1.2KMeans算法和canopy算法一、kMeans算法KMEANS算法是输入聚类个数k,以及包含n个数据对象的数据库,输出满足方差最小标准k个聚类的一种算法。k-means算法接受输入量k;然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。1、处理流程(1)从n个数据对象任意选择k个对象作为初始聚类中心;(2)根据每个聚类对象的均值(中心对象),计算每个对象与这些中心对象的距离;并根据最小距离重新对相应对象进行划分;(3)重新计算每个(有变化)聚类的均值(中心对象);(4)计算标准测度函数,当满足一定条件,如函数收敛时,则算法终止;如果条件不满足则回到步骤(2)。10.1.2KMeans算法和canopy算法1、实现方法k-means算法接受输入量k;然后将n个数据对象划分为k个聚类以便使得所获得的聚类满足:同一聚类中的对象相似度较高;而不同聚类中的对象相似度较小。聚类相似度是利用各聚类中对象的均值所获得一个“中心对象”(引力中心)来进行计算的。k-means算法的工作过程说明如下:首先从n个数据对象任意选择k个对象作为初始聚类中心;而对于所剩下其它对象,则根据它们与这些聚类中心的相似度(距离),分别将它们分配给与其最相似的(聚类中心所代表的)聚类;然后再计算每个所获新聚类的聚类中心(该聚类中所有对象的均值);不断重复这一过程直到标准测度函数开始收敛为止。一般都采用均方差作为标准测度函数.k个聚类具有以下特点:各聚类本身尽可能的紧凑,而各聚类之间尽可能的分开。算法的时间复杂度上界为O(n*k*t),其中t是迭代次数。10.1.2KMeans算法和canopy算法k-means算法是一种基于样本间相似性度量的间接聚类方法,属于非监督学习方法。此算法以k为参数,把n个对象分为k个簇,以使簇内具有较高的相似度,而且簇间的相似度较低。相似度的计算根据一个簇中对象的平均值(被看作簇的重心)来进行。此算法首先随机选择k个对象,每个对象代表一个聚类的质心。对于其余的每一个对象,根据该对象与各聚类质心之间的距离,把它分配到与之最相似的聚类中。然后,计算每个聚类的新质心。重复上述过程,直到准则函数收敛。k-means算法是一种较典型的逐点修改迭代的动态聚类算法,其要点是以误差平方和为准则函数。逐点修改类中心:一个象元样本按某一原则,归属于某一组类后,就要重新计算这个组类的均值,并且以新的均值作为凝聚中心点进行下一次象元素聚类;逐批修改类中心:在全部象元样本按某一组的类中心分类之后,再计算修改各类的均值,作为下一次分类的凝聚中心点。10.1.2KMeans算法和canopy算法openSUSE项目是由Novell发起的开源社区计划。旨在推进Linux的广泛使用,提供了自由简单的方法来获得世界上最好用的Linux发行版之一openSUSE。openSUSE项目为Linux开发者和爱好者提供了开始使用Linux所需要的一切。该项目由SUSE等公司赞助,2011年Attachmate集团收购了Novell,并把Novell和SUSE做为两个独立的子公司运营。openSUSE操作系统和相关的开源程序会被SUSELinuxEnterprise(比如SLES和SLED)使用。openSUSE对个人来说是完全免费的,包括使用和在线更新。外文名称:openSUSE发起人
:Novell目标
:推进Linux的广泛使用类别
:开源社区项目openSUSE是一个一般用途的基于Linux内核的GNU/Linux操作系统,由openSUSE项目社区开发维护,该项目由SUSE等公司赞助。在2004年2月Novell收购SUSELinux之后,Novell决定以100%开源产品发布SUSELinux专业版,并作为一个开源项目,openSUSE继承与SUSELinuxProfessional。2011年Attachmate集团收购了Novell,并把Novell和SUSE做为两个独立的子公司运营。SUSE提供基于openSUSE的企业级产品SUSELinuxEnterprise。openSUSE项目除了提供一个发行版,还包括一个OpenBuildService,openSUSE的目的是提供提供一个稳定的基础并让用户通过OpenBuildService得到额外的更多更新的软件,甚至是一个滚动发行的版本命为Tumbleweed。系统默认KDE作为图形环境,当然GNOME也是很不错的,其他也有Xfce、LXDE等图形环境。openSUSE是著名Novell公司旗下的Linux的发行版,发行量在欧洲占第一位。它采用的KDE4.3作为默认桌面环境,同时也提供GNOME桌面版本。它的软件包管理系统采用自主开发的YaST,颇受好评。他的用户界面非常华丽,甚至超越windows7,而且性能良好,最新版本是13.2。10.1.2KMeans算法和canopy算法二、canopy算法CanopyClustering这个算法是2000年提出来的,此后与Hadoop配合,已经成为一个比较流行的算法了。确切的说,这个算法获得的并不是最终结果,它是为其他算法服务的,比如k-means算法。它能有效地降低k-means算法中计算点之间距离的复杂度。Mahout中已经实现了这个算法。首先为大家解释一下canopy算法,下图很好得展示了Canopy聚类的过程。(图10-)图10-5canopy算法聚类过程10.1.2KMeans算法和canopy算法图中有一个T1,一个T2,我们称之为距离阀值,显然T1>T2,这两个值有什么用呢?我们先确定了一个中心,然后计算其他点到这个中心间的距离,当距离大于T1时,小于T1大于T2时,小于T2时,对这个点的处理都是不一样的。10.1.3贝叶斯算法学过概率理论的人都知道条件概率的公式:P(AB)=P(A)P(B|A)=P(B)P(A|B);即事件A和事件B同时发生的概率等于在发生A的条件下B发生的概率乘以A的概率。由条件概率公式推导出贝叶斯公式:P(B|A)=P(A|B)P(B)/P(A);即,已知P(A|B),P(A)和P(B)可以计算出P(B|A)。假设B是由相互独立的事件组成的概率空间{B1,b2,...bn}。则P(A)可以用全概率公式展开:P(A)=P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn)。贝叶斯公式表示成:P(Bi|A)=P(A|Bi)P(Bi)/(P(A|B1)P(B1)+P(A|B2)P(B2)+..P(A|Bn)P(Bn));常常把P(Bi|A)称作后验概率,而P(A|Bn)P(Bn)为先验概率。而P(Bi)又叫做基础概率。贝叶斯公式:图10-6贝叶斯公式10.1.3贝叶斯算法贝叶斯公式看起来很简单,但是在自然科学领域应用范围及其广泛。同时理论本身蕴含了深刻的思想。一.贝叶斯概率的历史贝叶斯理论和贝叶斯概率以托马斯•贝叶斯(1702-1761)命名,他证明了现在称为贝叶斯定理的一个特例。术语贝叶斯却是在1950年左右开始使用,很难说贝叶斯本人是否会支持这个以他命名的概率非常广义的解释。拉普拉斯证明了贝叶斯定理的一个更普遍的版本,并将之用于解决天体力学、医学统计中的问题,在有些情况下,甚至用于法理学。但是拉普拉斯并不认为该定理对于概率论很重要。他还是坚持使用了概率的经典解释。弗兰克•普伦普顿•拉姆齐在《数学基础》(1931年)中首次建议将主观置信度作为概率的一种解释。Ramsey视这种解释为概率的频率解释的一个补充,而频率解释在当时更为广泛接受。统计学家BrunodeFinetti于1937年采纳了Ramsey的观点,将之作为概率的频率解释的一种可能的代替。L.J.Savage在《统计学基础》(1954年)中拓展了这个思想。有人试图将“置信度”的直观概念进行形式化的定义和应用。最普通的应用是基于打赌:置信度反映在行为主体愿意在命题上下注的意愿上。当信任有程度的时候,概率计算的定理测量信任的理性程度,就像一阶逻辑的定理测量信任的理性程度一样。很多人将置信度视为经典的真值(真或假)的一种扩展。HaroldJeffreys,RichardT.Cox,EdwinJaynes和I.J.Good研探了贝叶斯理论。其他著名贝叶斯理论的支持者包括JohnMaynardKeynes和B.O.Koopman。10.1.3贝叶斯算法二贝叶斯法则的原理通常,事件A在事件B(发生)的条件下的概率,与事件B在事件A的条件下的概率是不一样的;然而,这两者是有确定的关系,贝叶斯法则就是这种关系的陈述。作为一个规范的原理,贝叶斯法则对于所有概率的解释是有效的;然而,频率主义者和贝叶斯主义者对于在应用中概率如何被赋值有着不同的看法:频率主义者根据随机事件发生的频率,或者总体样本里面的个数来赋值概率;贝叶斯主义者要根据未知的命题来赋值概率。一个结果就是,贝叶斯主义者有更多的机会使用贝叶斯法则。贝叶斯法则是关于随机事件A和B的条件概率和边缘概率的。bayes&其中L(A|B)是在B发生的情况下A发生的可能性。10.1.3贝叶斯算法在贝叶斯法则中,每个名词都有约定俗成的名称:Pr(A)是A的先验概率或边缘概率。之所以称为"先验"是因为它不考虑任何B方面的因素。Pr(A|B)是已知B发生后A的条件概率,也由于得自B的取值而被称作A的后验概率。Pr(B|A)是已知A发生后B的条件概率,也由于得自A的取值而被称作B的后验概率。Pr(B)是B的先验概率或边缘概率,也作标准化常量(normalizedconstant)。按这些术语,Bayes法则可表述为:后验概率=(似然度*先验概率)/标准化常量也就是说,后验概率与先验概率和似然度的乘积成正比。10.1.3贝叶斯算法另外,比例Pr(B|A)/Pr(B)也有时被称作标准似然度(standardisedlikelihood),Bayes法则可表述为:后验概率=标准似然度*先验概率要理解贝叶斯推断,必须先理解贝叶斯定理。后者实际上就是计算"条件概率"的公式。所谓"条件概率"(Conditionalprobability),就是指在事件B发生的情况下,事件A发生的概率,用P(A|B)来表示。图10-7贝叶斯图解10.1.3贝叶斯算法根据文氏图,可以很清楚地看到在事件B发生的情况下,事件A发生的概率就是P(A∩B)除以P(B)。即:P(A|B)=P(A∩B)/P(B)同理可得,P(B|A)=P(A∩B)/P(A)所以,
即P(A|B)=(P(B|A)*P(A))/P(B)10.1.3贝叶斯算法三.贝叶斯推断的含义对条件概率公式进行变形,可以得到如下形式:P(A|B)=P(A)*P(B|A)/P(B)我们把P(A)称为"先验概率"(Priorprobability),即在B事件发生之前,我们对A事件概率的一个判断。P(A|B)称为"后验概率"(Posteriorprobability),即在B事件发生之后,我们对A事件概率的重新评估。P(B|A)/P(B)称为"可能性函数"(Likelyhood),这是一个调整因子,使得预估概率更接近真实概率。所以,条件概率可以理解成下面的式子:后验概率=先验概率x调整因子这就是贝叶斯推断的含义。我们先预估一个"先验概率",然后加入实验结果,看这个实验到底是增强还是削弱了"先验概率",由此得到更接近事实的"后验概率"。在这里,如果"可能性函数"P(B|A)/P(B)>1,意味着"先验概率"被增强,事件A的发生的可能性变大;如果"可能性函数"=1,意味着B事件无助于判断事件A的可能性;如果"可能性函数"<1,意味着"先验概率"被削弱,事件A的可能性变小。10.2.1实训目的和要求掌握Hadoop基本使用方法熟悉Ubuntu操作10.2.2运用单词计数是最简单也是最能体现MapReduce思想的程序之一,可以称为MapReduce版"HelloWorld",该程序的完整代码可以在Hadoop安装包的"src/examples"目录下找到。单词计数主要完成功能是:统计一系列文本文件中每个单词出现的次数,如下图所示。图10-8WC图解10.2.2运用1.创建本地的示例数据文件:依次进入【Home】-【hadoop】-【hadoop-1.2.1】创建一个文件夹file用来存储本地原始数据。图10-9两个文件10.2.2运用并在这个目录下创建2个文件分别命名为【myTest1.txt】和【myTest2.txt】或者你想要的任何文件名。分别在这2个文件中输入下列示例语句:图10-10文件内容图10-11文件内容10.2.2运用2.在HDFS上创建输入文件夹呼出终端,输入下面指令:bin/hadoopfs-mkdirhdfsInput执行这个命令时可能会提示类似安全的问题,如果提示了,请使用bin/hadoopdfsadmin-safemodeleave来退出安全模式。当分布式文件系统处于安全模式的情况下,文件系统中的内容不允许修改也不允许删除,直到安全模式结束。安全模式主要是为了系统启动的时候检查各个DataNode上数据块的有效性,同时根据策略必要的复制或者删除部分数据块。运行期通过命令也可以进入安全模式。意思是在HDFS远程创建一个输入目录,我们以后的文件需要上载到这个目录里面才能执行。10.2.2运用3.上传本地file中文件到集群的hdfsInput目录下在终端依次输入下面指令:cdhadoop-1.2.1bin/hadoopfs-putfile/myTest*.txthdfsInput图10-12过程10.2.2运用4.运行例子:在终端输入下面指令:bin/hadoopjarhadoop-examples-1.2.1.jarwordcounthdfsInputhdfsOutputbin/hadoopjarhadoop-examples-*.jarwordcounthdfsInputhdfsOutput应该出现下面结果:(如图10-13)10.2.2运用Hadoop命令会启动一个JVM来运行这个MapReduce程序,并自动获得Hadoop的配置,同时把类的路径(及其依赖关系)加入到Hadoop的库中。以上就是HadoopJob的运行记录,从这里可以看到,这个Job被赋予了一个ID号:job_201202292213_0002,而且得知输入文件有两个(Totalinputpathstoprocess:2),同时还可以了解map的输入输出记录(record数及字节数),以及reduce输入输出记录。查看HDFS上hdfsOutput目录内容:在终端输入下面指令:bin/hadoopfs-lshdfsOutput在下图10-14中是得到的结果:图10-14生成的文件10.2.2运用从上图中知道生成了三个文件,我们的结果在"part-r-00000"中。使用下面指令查看结果输出文件内容bin/hadoopfs-catoutput/part-r-00000在下图10-15中为分析结果图10-15分析结果(注意:请忽视截图指令中的3)输出目录日志以及输入目录中的文件是永久存在的,如果不删除的话,如果出现结果不一致,请参考这个因素。10.3.1实训目的和要求掌握简单的spark编程熟悉rdd操作熟悉sparkSQl10.3.2运用1任务描述通过spark将本地的数据上传至spark集群(这里为单节点)并存储至数据库中2任务要求(1)数据集来源淘宝双11数据链接:/s/1kVl4flH密码:b0ne图10-16要读取数据的截图10.3.2运用(2)建立maven项目配置pom文件(3)程序中的数据库需要改成自己对应的数据库(4)在对应目录下建立要读取的文件3知识点提示(1)首先将读取的数据放在rdd中,然后将rdd转化为datafram,中间用Record类来封装数据(object类不用实例化),最后通过datafram存入数据库4操作步骤提示这里主要通过idea来实现一下为操作步骤:(1)首先确保已经安装好scala和idea(2)配置好数据库具体的字段参考程序中的类Record(3)建立maven项目,配置好pom依赖(4)建立Example类编译运行程序10.3.2运用5实现的代码importorg.apache.spark.sql.{SQLContext,SaveMode}importorg.apache.spark.{SparkConf,SparkContext}objectExample{defmain(args:Array[String]){valconf=newSparkConf().setAppName("sparksq").setMaster("local[2]")valsc=newSparkContext(conf)valsqlContext=newSQLContext(sc)valrdd=sc.textFile("/usr/sample")//将读取的数据安空格键切分valresult=rdd.map(x=>{//根据逗号分隔符来切分valp=x.split(",")//将切分好的每个字段桶过样例类来封装Record(p(0),p(1),p(2),p(3),p(4),p(5),p(6),p(7),p(8),p(9),p(10))})10.3.2运用importsqlContext.implicits._//dataframe的隐式转换将rdd转化为dataframevaldataframe=result.toDF()//建立sparksql表adataframe.registerTempTable("a")//打印表结构dataframe.show()//查询语句valsqlcommand="select*froma"valprop=newjava.util.Properties//设置数据库用户名及密码prop.setProperty("user","root")prop.setProperty("password","Qwe123123")10.3.2运用//执行查询语句并将结果写入数据库中sqlContext.sql(sqlcommand).write.mode(SaveMode.Append).jdbc("jdbc:mysql://localhost:3306/mysql","log3",prop)}}//创建样例类caseclassRecord(user_id:String,item_id:String,cat_id:String,merchant_id:String,brand_id:String,month:String,day:String,action:String,age_range:String,gender:String,province:String)下雨10-17中是程序的运行结果:图10-17程序运行结果10.3.2运用6相关知识1、RDD是什么RDD:Spark的核心概念是RDD,指的是一个只读的,可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。为什么会产生RDD?(1)传统的MapReduce虽然具有自动容错、平衡负载和可拓展性的优点,但是其最大缺点是采用非循环式的数据流模型,使得在迭代计算式要进行大量的磁盘IO操作。RDD正是解决这一缺点的抽象方法。(2)RDD的具体描述RDD(弹性数据集)是Spark提供的最重要的抽象的概念,它是一种有容错机制的特殊集合,可以分布在集群的节点上,以函数式编操作集合的方式,进行各种并行操作。可以将RDD理解为一个具有容错机制的特殊集合,它提供了一种只读、只能有已存在的RDD变换而来的共享内存,然后将所有数据都加载到内存中,方便进行多次重用。a.他是分布式的,可以分布在多台机器上,进行计算。b.他是弹性的,计算过程中内错不够时它会和磁盘进行数据交换。10.3.2运用c.这些限制可以极大的降低自动容错开销d.实质是一种更为通用的迭代并行计算框架,用户可以显示的控制计算的中间结果,然后将其自由运用于之后的计算。(3)RDD的容错机制实现分布式数据集容错方法有两种:数据检查点和记录更新RDD采用记录更新的方式:记录所有更新点的成本很高。所以,RDD只支持粗颗粒变换,即只记录单个块上执行的单个操作,然后创建某个RDD的变换序列(血统)存储下来;变换序列指,每个RDD都包含了他是如何由其他RDD变换过来的以及如何重建某一块数据的信息。因此RDD的容错机制又称“血统”容错。要实现这种“血统”容错机制,最大的难题就是如何表达父RDD和子RDD之间的依赖关系。实际上依赖关系可以分两种,窄依赖和宽依赖:窄依赖:子RDD中的每个数据块只依赖于父RDD中对应的有限个固定的数据块;宽依赖:子RDD中的一个数据块可以依赖于父RDD中的所有数据块。10.3.2运用例如:map变换,子RDD中的数据块只依赖于父RDD中对应的一个数据块;groupByKey变换,子RDD中的数据块会依赖于多有父RDD中的数据块,因为一个key可能错在于父RDD的任何一个数据块中将依赖关系分类的两个特性:第一,窄依赖可以在某个计算节点上直接通过计算父RDD的某块数据计算得到子RDD对应的某块数据;宽依赖则要等到父RDD所有数据都计算完成之后,并且父RDD的计算结果进行hash并传到对应节点上之后才能计算子RDD。第二,数据丢失时,对于窄依赖只需要重新计算丢失的那一块数据来恢复;对于宽依赖则要将祖先RDD中的所有数据块全部重新计算来恢复。所以在长“血统”链特别是有宽依赖的时候,需要在适当的时机设置数据检查点。也是这两个特性要求对于不同依赖关系要采取不同的任务调度机制和容错恢复机制。10.3.2运用2、RDD在Spark中的地位及作用(1)为什么会有Spark?因为传统的并行计算模型无法有效的解决迭代计算(iterative)和交互式计算(interactive);而Spark的使命便是解决这两个问题,这也是他存在的价值和理由。(2)Spark如何解决迭代计算?其主要实现思想就是RDD,把所有计算的数据保存在分布式的内存中。迭代计算通常情况下都是对同一个数据集做反复的迭代计算,数据在内存中将大大提升IO操作。这也是Spark涉及的核心:内存计算。(3)Spark如何实现交互式计算?因为Spark是用scala语言实现的,Spark和scala能够紧密的集成,所以Spark可以完美的运用scala的解释器,使得其中的scala可以向操作本地集合对象一样轻松操作分布式数据集。(4)Spark和RDD的关系?可以理解为:RDD是一种具有容错性基于内存的集群计算抽象方法,Spark则是这个抽象方法的实现。10.3.2运用3、如何操作RDD?(1)如何获取RDDa.从共享的文件系统获取,(如:HDFS)b.通过已存在的RDD转换c.将已存在scala集合(只要是Seq对象)并行化,通过调用SparkContext的parallelize方法实现d.改变现有RDD的之久性;RDD是懒散,短暂的。(RDD的固化:cache缓存至内错;save保存到分布式文件系统)(2)操作RDD的两个动作a.Actions:对数据集计算后返回一个数值value给驱动程序;例如:Reduce将数据集的所有元素用某个函数聚合后,将最终结果返回给程序。b.Transformation:根据数据集创建一个新的数据集,计算后返回一个新RDD;例如:Map将数据的每个元素经过某个函数计算后,返回一个姓的分布式数据集。10.3.2运用4、RDD的创建方式集合并行化valarr=Array(1,2,3,4,5,6,7,8)valrdd1=sc.parallelize(arr,2)//2代表分区数量从外部文件系统,分布式文件系统:如hdfs文件系统,S3valrdd2=sc.textFile("hdfs://node1:9000/words.txt")10.3.2运用4、什么是sparksql?SparkSQL是用于结构化数据处理的Spark模块。与基本的SparkRDDAPI不同,SparkSQL提供的接口为Spark提供了关于数据结构和正在执行的计算的更多信息。在内部,SparkSQL使用这些额外的信息来执行额外的优化。有几种与SparkSQL进行交互的方式,包括SQL和DatasetAPI。在计算结果时,使用相同的执行引擎,而不管使用哪种API/语言表示计算。这种统一意味着开发人员可以轻松地在不同的API之间来回切换,基于这些API提供了表达给定转换的最自然的方式。SparkSQL的一个用途是执行SQL查询。SparkSQL也可以用来从现有的Hive安装中读取数据。用另一种编程语言中运行SQL时,结果将作为数据集/数据框返回。您还可以使用命令行或通过JDBC/ODBC与SQL接口进行交互。10.3.2运用4、sparksql的一些操作//读取数据,将每一行的数据使用列分隔符分割vallineRDD=sc.textFile("hdfs://localhost:9000/person.txt").map(_.split(""))//定义caseclass(相当于表的schema)caseclassPerson(name:String,age:Int)//将lineRDD转换成personRDDvalpersonRDD=lineRDD.map(x=>Person(x(0),x(1).toInt))//将personRDD转换成DataFramevalpersonDF=personRDD.toDF//对personDF进行处理personDF.showpersonDF.select(personDF.col("name")).showpersonDF.select(col("name")).showpersonDF.select("name").showpersonDF.printSchema10.3.2运用//#(SQL风格语法)将DF注册成表personDF.registerTempTable("t_person")//查询:sqlContext.sql("select*fromt_personorderbyagedesclimit2").showsqlContext.sql("desct_person").showvalresult=sqlContext.sql("select*fromt_personorderbyagedesc")//保存结果result.save("hdfs://localhost:9000/sql/res1")10.3.2运用6、dataFrame的介绍DataFrame:与RDD类似,DataFrame也是一个分布式数据容器。然而DataFrame更像传统数据库的二维表格,除了数据以外,还记录数据的结构信息,即schema。同时,与Hive类似,DataFrame也支持嵌套数据类型(struct、array和map)。从API易用性的角度上看,DataFrameAPI提供的是一套高层的关系操作,比函数式的RDDAPI要更加友好,门槛更低。由于与R和Pandas的DataFrame类似,SparkDataFrame很好地继承了传统单机数据分析的开发体验。DataFrame与RDD的主要区别在于,前者带有schema元信息,即DataFrame所表示的二维表数据集的每一列都带有名称和类型。这使得SparkSQL得以洞察更多的结构信息,从而对藏于DataFrame背后的数据源以及作用于DataFrame之上的变换进行了针对性的优化,最终达到大幅提升运行时效率的目标。反观RDD,由于无从得知所存数据元素的具体内部结构,SparkCore只能在stage层面进行简单、通用的流水线优化。10.3.2运用7、dataFrame的一些操作使用SparkSession,应用程序可以从现有的RDD,Hive表或Spark数据源创建DataFrame。举个例子,下面根据J
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026中国邮政集团亳州分公司网厅(楚村支局)外包人才招聘备考题库完整参考答案详解
- 2026年厦门高新人才开发有限公司招聘备考题库含答案详解
- 2026年北海海关综合技术服务中心招聘非编人员5人备考题库参考答案详解
- 2026年南京机电职业技术学院公开招聘高层次人才备考题库含答案详解
- 2026年上海南华国际物流有限公司招聘备考题库及参考答案详解一套
- 2026年中国石化销售股份有限公司山东滨州邹平石油分公司招聘备考题库有答案详解
- 2026年凯里市华鑫高级中学教师招聘备考题库及一套参考答案详解
- 2026年上海大学企业家商学院运营总监招聘备考题库完整答案详解
- 2025-2026学年浙江省杭州市临平区统编版三年级上册期中考试语文试卷【含答案详解】
- 学校招标内控制度
- 2025至2030中国拆除工程行业项目调研及市场前景预测评估报告
- T/CHC 1007-2023硫酸软骨素钠
- 滑坡治理可行性研究报告范文
- 英语教学课件Unit 1 The lion and the mouse Period1课件
- 2025年低压电工证(复审)考试笔试试题(600题)含答案
- 村委会会计 试题及答案
- 高速收费站用电安全
- DB45T 1056-2014 土地整治工程 第2部分:质量检验与评定规程
- 装饰公司营销总监述职报告
- 高标准农田建设施工安全保障措施
- 大学《军事理论》考试题库及答案解析(10套)
评论
0/150
提交评论