版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第4章房产大数据分析与探索某房产公司销售人员业绩分析第一部分数据集处理数据操作分析情境导入
员工业绩考核分析是企业工作总结的重要组成部分。从业绩分析中员工可以清楚的知道自己的工作应该达到何种标准,发现自己的工作长处和不足,激发工作的积极性。管理者可以清楚的了解员工的工作情况,通过分析不足,帮助员工改进、提高业绩,促进企业的发展进步。假设现有某房产公司一个部门员工的某年销售业绩数据,请帮助部门经理对其进行统计分析,获取相关信息。学习目标和要求1、掌握将数据构建为RDD的方法。2、能使用RDD的各种转换和行动操作对数据集进行处理分析。3、会对处理完成的数据进行存储操作。数据集处理
在Spark中最核心最基础的概念是弹性分布式数据集(ResilientDistributedDatasets,RDD)。它是一种分布式的内存抽象,可以基于任何数据结构进行创建。
创建RDD的方法有两种,一种是基于内存(集合)创建RDD,另一种是从外部数据集创建。1、基于内存(集合)创建RDD。
从集合中创建RDD,主要提供了两个方法:使用SparkContext类中的parallelize和makeRDD两个方法。数据集处理(1)parallelize方法创建RDD
此方法有两个参数可以输入,第一个参数用来接收一个集合。第二个参数是可选的,用于指定创建的RDD的分区数。(2)makeRDD方法创建RDDmakeRDD方法和parallelize方法类似,但它可以指定每个分区的首选位置。数据集处理2、从外部存储数据构造RDD数据集处理
读取一个放在文件系统中的数据进行创建RDD。从本地文件创建,主要用于测试;使用HDFS文件获取外部数据集创建,实践操作中最常用。通过调用SparkContext的textFile方法读取数据集。调用命令如下:textFile("/my/directory")textFile("/my/directory/*.txt")textFile("/my/directory/*.gz")(1)加载HDFS上存储的CSV文件构造一个RDD数据集处理
从HDFS中的数据创建RDD,首先需要定义文件在HDFS上存储的路径,然后根据路径使用sc.textFile()方法进行创建。//定义HDFS上test.csv文件的存储路径valHDFSfile="/Chapter4/test.csv"
//使用textFile方法,加载文件并构造RDDvalHDFSrdd=sc.textFile(HDFSfile)
//查看返回值HDFSrdd.collect()(2)加载本地Linux中的文件构造一个RDD数据集处理
读取本地Linux中的文件构造RDD也是通过sc.textFile("path")的方法,在path路径前面加上“file:///”表示从本地文件系统读取数据。3、操作练习——构建员工业绩RDD数据集处理(1)上传数据集到HDFS文件系统中。(2)从HDFS文件系统中读取文件并创建RDD。数据操作分析1、RDD支持的两种操作。(1)转换操作:就是对RDD中的数据进行各种转换。方法名称作用map将RDD中的每一个数据元素通过func函数转换,返回新的RDD。flatmap首先将map方法应用于RDD的所有元素,然后将结果扁平化拆分,返回一个新的RDD。sortby通过指定条件对RDD中的元素进行排序。filter通过指定条件对RDD中的元素进行过滤。distinct对RDD中的所有元素去重,返回一个去重后的RDD。union将两个RDD进行合并,返回合并后的数据集。keys返回PairRDD中的“键”形成的新的RDD。values返回PairRDD中的“值”形成的新的RDD。reducebykey对“键”相同的值使用指定的函数进行聚合操作。groupbykey对“键”相同的值根据指定条件进行分组。sortbykey根据“键”对RDD内部的元素进行排序。join根据“键”对两个RDD进行连接。数据操作分析(2)行动操作:RDD的行动操作则是向驱动器程序返回结果或者把结果写入外部系统的操作,会触发实际的计算方法名称作用count返回RDD中元素的个数。take返回RDD中前n个元素值。first返回RDD中第一个元素值。collect返回RDD中所有元素的列表。top返回RDD中排名前n的元素值。数据操作分析2、统计部门人员人数。count()行动操作,返回的是RDD内元素的个数。举例:利用序列Seq(1,2,3,4,5,6)创建的rdd中有6个数字元素操作练习:统计部门人员人数数据操作分析3、分别统计上/下半年业绩排名,取前三位及最后三位利用map、flatmap、sortby、take,first、collect等方法对数据进行操作实现。(1)map转换操作map转换操作是最常用的转换算子,对RDD中的每个元素都执行一个指定的函数来产生一个新的RDD。举例:数据操作分析(2)flatmap转换操作
此方法首先将map函数应用于RDD的所有元素,然后将返回的结果平坦化。举例:对map转换操作中的str1进行flatmap转换操作。
对比map和flatMap操作的输出结果图,可以很容易的看出两者的区别,因此flatMap操作通常用来切分单词。数据操作分析(3)sortby转换操作此方法是对RDD进行排序,有3个参数可以输入。 sortby(参数一,参数二,参数三)参数一是要进行排序的对象值;参数二是排序方式,默认是正序排序,使用false参数就是倒序排序;参数三是分区个数。数据操作分析//加载一个RDD,命名为testvaltest=sc.parallelize(Array(("dog",3),("cat",1),("monkey",2),("pig",3),("bird",2)))//根据test中的第二位元素进行降序排序valtest_desc=test.sortBy(_._2,false)//查看结果test_desc.collect//根据test中的第二位元素进行升序排序valtest_asc=test.sortBy(_._2)//查看结果test_asc.collectsortby举例:数据操作分析(4)take,first、collect行动操作take行动操作返回RDD的前n个元素值。first行动操作返回的是RDD中的第一个元素值。collect行动操作是以数组的形式将RDD中所有的元素返回。数据操作分析(5)进行分析,实现任务。1)按照前面的问题分析思路,首先对上半年和下半年的业绩数据集firstrdd、secondrdd进行map转换,将每行数据分割为4列。2)利用sortBy方法对map_firstrdd和map_secondrdd数据集中的业绩列分别进行降序和升序排序,取出排名前三和后三的信息。对上半年业绩列进行降序和升序排序: valsort_firstrdd=map_firstrdd.sortBy(x=>x._4,false) sort_firstrdd.take(3) valsort_firstrdd=map_firstrdd.sortBy(x=>x._4) sort_firstrdd.take(3)同理对下半年业绩列进行降序和升序排序。数据操作分析4、统计上/下半年业绩超过5000万的人员。
要获取这个问题的数据,首先需要分别过滤出上下半年业绩超过5000万的人员。但是有些人员只有上半年或者下半年符合要求,有些人员是上下半年都符合要求,因此还需要对过滤出来的人员信息进行去重。可以利用filter、distinct、union等方法对数据进行操作。(1)filter转换操作此方法返回满足指定过滤条件的元素,不满足条件的元素被忽略。//读取一个数字列表创建RDDvalrdd=sc.parallelize(List(1,3,6,2,8,8,5,6,7))//过滤出大于5的数字rdd.filter(x=>x>5).collect数据操作分析(2)distinct转换操作
此方法是对RDD中的数据去重,把完全相同的元素去除。对前述filter转换操作中的rdd数据进行操作。由输出结果可见,原先列表中重复的数字6和8被去重了。数据操作分析(3)union转换操作
此方法可以将两个RDD进行合并,返回两个RDD的并集,并且不去重。但是要求两个RDD中每个元素中的值的个数及数据类型保持一致。//定义加载两个RDD,命名为test1和test2valtest1=sc.parallelize(Array(("dog",3),("cat",1),("monkey",2)))valtest2=sc.parallelize(Array(("monkey",2),("pig",3),("bird",2)))//执行union操作合并两个RDDtest1.union(test2).collect数据操作分析(4)进行分析,实现任务。1)利用filter方法过滤出业绩大于5000万的人员,最终返回人员编号信息。2)利用union方法,将上述过滤后的数据集filter_firstrdd和filter_secondrdd进行合并,并通过distinct方法去除重复的人员编号信息。数据操作分析5、统计此部门当年的房屋销售套数。
要获取这个问题的数据,只需取出数据表的第三列“房屋销售套数”数据,然后利用求和函数进行求和。可以利用RDD的相关描述性统计函数实现。(1)min()、max()函数min()方法返回RDD中的最小值,max()方法返回RDD中的最大值。数据操作分析(2)mean()、sum()函数mean()函数返回RDD中的平均值。sum()函数返回RDD中的总和。举例:求RDD数据集的平均值和总和。数据操作分析(3)variance()、stdev()函数variance()计算RDD中所有元素的总体方差。stdev()计算RDD的标准差。举例:求RDD数据集的总体方差和样本方差。数据操作分析(4)进行分析,实现任务。
将经过map操作处理好的上/下半年业绩数据集map_firstrdd和map_secondrdd进行合并,取出第三列数据,利用sum函数计算总数。数据操作分析6、查看全年总业绩最高人员。
此任务需要将每个人上、下半年的业绩进行相加,然后取最高者。这个过程需要对人员编号相同的业绩数据进行识别并相加。在RDD中可以通过键值对(Key-Value)的操作完成。Spark为包含键值对类型的RDD提供了一些专有的操作,这些RDD被称为Pair
RDD。数据操作分析(1)创建PairRDD
创建PairRDD的方法有很多,当需要将一个普通RDD转换为PairRDD时,可以使用map方法来实现。//定义一个RDDvalrdd=sc.parallelize(List("dog","cat","monkey","pig"))//创建键值对valpairrdd=rdd.map(word=>(word,1))(2)keys()、values()转换操作keys()、values()操作返回的类型是RDD。//取pairrdd中的键pairrdd.keys.collect//取pairrdd中的值pairrdd.values.collect数据操作分析(3)reducebykey()转换操作
此方法应用于键值对数据集操作,对Key相同的Value使用指定的函数进行聚合操作,返回一个键值对的数据集。reduceByKey((x,y)=>x+y),对PairRDD中键相同的值进行相加操作。数据操作分析(4)groupbykey()转换操作
此方法会对相同键的值进行分组,形成二元元组,第一个字段为相同的键,第二个字段为具备相同键的值的集合。对前一个任务中的map_test数据集进行操作。 valgroup_test=map_test.groupByKey() group_test.collect数据操作分析(5)sortByKey()转换操作此方法返回一个根据“键”进行排序的RDD。举例:数据操作分析(6)进行分析,实现任务1)将上、下半年的的业绩合并到同一个RDD中。valtotal=map_firstrdd.union(map_secondrdd)2)将数据转换成(员工编号,业绩)键值对,利用reduceByKey方法对相同员工编号对应的业绩值进行相加。数据操作分析3)对业绩总和进行排序,获得最高业绩人员信息。//利用sortBy方法对指定列进行排序 yeji.sortBy(x=>x._2,false) yeji.sortBy(x=>x._2,false).take(1)数据操作分析7、存储以上统计分析信息
数据存储的方式有多种,比如将数据存储为JSON文件、CSV文件、文本文件等。文本文件的存储可以直接调用saveAsTextFile(path)进行存储。
对上、下半年的业绩以及全年总业绩数据进行join连接,再将结果数据以文本文件的形式存储到HDFS中。操作练习:某城市近年房产销售状况分析第二部分数据准备数据探索与分析情境导入
房子是一个价格昂贵的“商品”,但也是每个人生活必不可少的一件“商品”。房子的价格、所处的位置、装修情况等等因素都是购房者关心的主要问题。了解房产市场的变化规律以及各个因素对价格的影响,对于消费者来说是购房之前首先要做的功课。
现有一份来自某网站的某城市近年房产销售数据集house-price.csv,包含成交时间、价格、装修情况、区域等信息。学习目标和要求
能灵活综合的应用各种RDD操作和各个算子对数据进行分析,解决以下问题: 1、每年房产销售量趋势如何? 2、此城市各区域房产销量如何?均价如何? 3、在2018年1月1日的销量有多少? 4、查询2018年1月1日到1月31日之间,满五年房产的销售比例。 5、哪种装修类型的房子销量最高? 6、所售卖的房子中,电梯有无的比例,地铁有无情况?数据准备
此房产销售数据集是一个在系统外部的csv文件,因此需要将其上传至文件系统中,加载为RDD后再做处理分析。1、利用MobaXterm工具,将house-price.csv文件上传到本地Linux的/root/data/Chapter4文件夹内。2、启动Hadoop和Spark集群,将/root/data/Chapter4目录下的house-price.csv文件上传到HDFS文件系统的/Chapter4目录中。3、启动spark-shell,加载数据到RDD。数据探索与分析
在进行数据探索分析之前,还需要将前面加载到RDD中的数据进行转换,把每一条数据根据字段含义进行分割,以便后续数据处理分析。1、使用map方法转换RDD,以“,”将每一行数据分割。数据探索与分析2、对户人数的基本情况进行统计,获得记录条目的总数,以及在这些记录中包括多少个用户ID。//查看数据总条数m_houseprice.count//查看这些记录中的用户数m_houseprice.map(_(1)).distinct.count数据探索与分析3、了解房产销量趋势,统计每年房产销售量情况。
要获得每年的房产销售量情况,需要先从日期中提取年份数据;然后利用reduceByKey方法按年进行统计汇总;最后利用sortBy方法对统计汇总的数据进行排序,获得每年销量从高到低的排序情况。数据探索与分析4、分析此数据集中购买房屋所属的区域是哪些?各个区域的房产销售情况如何?各个区域的房屋均价
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度企业与保险公司保险合同
- 绩效办法宣贯课件
- 2024年度企业间设备租赁与购买期权合同
- 2024年度知识产权转让合同:某专利权人与受让方关于专利转让的合同
- 九绕高速公路A1安全管理制度汇编
- 《LC的简单使用》课件
- 《龙虾主题餐厅》课件
- 重温中秋班会课件
- 2024年度船舶坞修合同维修项目列表
- 学校租赁车辆的合同模板
- 有机玻璃生产线项目可行性研究报告
- 2020高中化学选修三物质结构与性质书本知识归纳总结填空题附答案
- 音乐作品授权书(共3页)
- 产品ID设计需求单.doc
- 上海大学微机实践报告(共9页)
- 广东省河流水功能二级区划成果表
- 酒驾私了协议书——范本
- 摔箱测试标准
- 白血病淋巴瘤免疫分型
- 森林施工组织设计(完整版)
- 经皮肾镜联合输尿管软镜治疗复杂肾结石治疗体会
评论
0/150
提交评论