盈润企业网站管理系统西安高校网站建设定制网站建设
- 作者: 五速梦信息网
- 时间: 2026年04月20日 06:59
当前位置: 首页 > news >正文
盈润企业网站管理系统,西安高校网站建设定制网站建设,姜堰网网站,做网站的windowlcd原创/朱季谦 本文适合入门Spark RDD的计算处理。 在日常工作当中#xff0c;经常遇到基于Spark去读取存储在HDFS中的批量文件数据进行统计分析的案例#xff0c;这些文件一般以csv或者txt文件格式存在。例如#xff0c;存在这样一份消费者行为数据#xff0c;字段包括消费…原创/朱季谦 本文适合入门Spark RDD的计算处理。 在日常工作当中经常遇到基于Spark去读取存储在HDFS中的批量文件数据进行统计分析的案例这些文件一般以csv或者txt文件格式存在。例如存在这样一份消费者行为数据字段包括消费者姓名,年龄,性别,月薪,消费偏好,消费领域,购物平台,支付方式,单次购买商品数量,优惠券获取情况,购物动机。 基于这份消费者行为数据往往会有以下一些分析目标 用户统计学分析针对性别、年龄等属性进行统计分析了解消费者群体的组成和特征。收入与购买行为的关系分析通过比较月薪和单次购买商品数量之间的关系探索收入水平对消费行为的影响。消费偏好和消费领域的分析查看不同消费者的消费偏好例如性价比、功能性、时尚潮流等和消费领域例如家居用品、汽车配件、美妆护肤等以了解他们的兴趣和偏好。购物平台和支付方式的分析研究购物平台例如天猫、淘宝、拼多多等和支付方式例如微信支付、支付宝等的选择情况了解消费者在电商平台上的偏好。优惠券获取情况和购物动机的关系观察优惠券获取情况和购物动机之间的联系探索消费者是否更倾向于使用优惠券进行购物。 针对这些需求就可以使用Spark来读取文件后进一步分析处理统计。 接下来就是针对以上分析目标设计一番Spark代码计算逻辑由此可入门学习下Spark RDD常用用法。 获取一份具备以下字段的csv随机假样本总共5246条数据包括“消费者姓名,年龄,性别,月薪,消费偏好,消费领域,购物平台,支付方式,单次购买商品数量,优惠券获取情况,购物动机”。 Amy Harris,39,男,18561,性价比,家居用品,天猫,微信支付,10,折扣优惠,品牌忠诚 Lori Willis,33,女,14071,功能性,家居用品,苏宁易购,货到付款,1,折扣优惠,日常使用 Jim Williams,61,男,14145,时尚潮流,汽车配件,淘宝,微信支付,3,免费赠品,礼物赠送 Anthony Perez,19,女,11587,时尚潮流,珠宝首饰,拼多多,支付宝,5,免费赠品,商品推荐 ……将样本存放到项目目录为src/main/resources/consumerdata.csv然后新建一个Scala的object类创建一个main方法, 模拟从HDSF读取数据然后通过.map(.split(,))将csv文件每一行切割成一个数组形式的RDD def main(args: Array[String]): Unit {val conf new SparkConf().setMaster(local).setAppName(consumer)val ss SparkSession.builder().config(conf).getOrCreate()val filePath: String src/main/resources/consumerdata.csvval consumerRDD ss.sparkContext.textFile(filePath).map(.split(,))可以写一段代码打印看一下consumerRDD结构—— consumerRDD.foreach(x {x.foreach(y print(y ))println()})打印结果如下—— 这个RDD相当于把每一行当作里一个Array[]数组第一行的Array0是消费者姓名即Amy HarrisArray1是年龄即39以此类推。 消费者姓名年龄性别月薪消费偏好消费领域购物平台支付方式单次购买商品数量优惠券获取情况购物动机Amy Harris39男18561性价比家居用品天猫微信支付10折扣优惠品牌忠诚Lori Willis33女14071功能性家居用品苏宁易购货到付款1折扣优惠日常使用。。。 获取到该RDD后就可以进行下一步的统计分析了。 一、统计消费者支付方式偏好分布 这行代码意思x.apply(7)表示取每一行的第八个字段相当数组Array[7]第八个字段是【支付方式】。 map(x(x.apply(7),1))表示是对RDD里每一行出现过的支付方式字段设置为1个例如第一行把原本数组格式Array的RDD做了转换生成微信支付1格式的新RDD表示用微信支付的用户出现了1次。reduceByKey(_ )表示按RDD的key进行聚合统计表示统计微信支付出现的次数支付宝出现的次数等。最后通过sortBy(.2,false)表示按照key-value当中的value进行倒序排序false表示倒叙true表示升序。 因此就可以按照以上格式对文本数据里的每一个字段做相应分析后文其他计算逻辑也是类似。 consumerRDD.map(x (x.apply(7),1)).reduceByKey( ).sortBy(.2, false).foreach(println)打印结果如下 二、统计购物平台偏好分布 x.apply(5)表示取每一行的第六个字段相当数组Array[5]第六个字段是【购物平台】。 同前文的【统计消费者支付方式偏好分布】一样通过map(x(x.apply(5),1))生成(购物平台,1)格式的RDD然后再通过reduceByKey算子针对相同的key做统计最后倒序排序。 consumerRDD.map(x (x.apply(5), 1)).reduceByKey( ).sortBy(.2, false).foreach(println)打印结果—— 三、统计购物偏好方式分布 x.apply(4)表示取每一行的第五个字段相当数组Array[4]第五个字段是【消费领域】。 consumerRDD.map(x (x.apply(4), 1)).reduceByKey( ).sortBy(.2, false).foreach(println)打印结果 四、统计购物动机分布 x.apply(10)表示取每一行的第十个字段相当数组Array[10]第10个字段是【购物动机】。 consumerRDD.map(x (x.apply(10), 1)).reduceByKey( ).sortBy(._2, false).foreach(println)打印结果—— 五、消费者年龄分布 该需求通过将RDD映射成DataFrame数据集方便用SQL语法处理按照年龄区间分区分别为0-2021-3031-40 ……这个分区字符串名就相当keyvalue表示落在该分区的用户数量。这时就可以分组做聚合统计了统计出各个年龄段的消费者数量。 //取出consumerRDD每一行数组需要的字段 val rowRDD consumerRDD.map{x Row(x.apply(0),x.apply(1).toInt,x.apply(2),x.apply(3).toInt,x.apply(4),x.apply(5),x.apply(6),x.apply(7),x.apply(8).toInt,x.apply(9),x.apply(10)) }//设置字段映射 val schema StructType(Seq(StructField(consumerName, StringType),StructField(age, IntegerType),StructField(gender, StringType),StructField(monthlyIncome, IntegerType),StructField(consumptionPreference, StringType),StructField(consumptionArea, StringType),StructField(shoppingPlatform, StringType),StructField(paymentMethod, StringType),StructField(quantityOfItemsPurchased, IntegerType),StructField(couponAcquisitionStatus, StringType),StructField(shoppingMotivation, StringType))) val df ss.createDataFrame(rowRDD, schema).toDF() //按年龄分布计算 val agedf df.withColumn(age_range,when(col(age).between(0, 20), 0-20).when(col(age).between(21, 30), 21-30).when(col(age).between(31, 40), 31-40).when(col(age).between(41, 50), 41-50).when(col(age).between(51, 60), 51-60).when(col(age).between(61, 70), 61-70).when(col(age).between(81, 90), 81-90).when(col(age).between(91, 100), 91-100).otherwise(Unknow) ) //分组统计 val result agedf.groupBy(agerange).agg(count(consumerName).alias(Count)).sort(desc(Count)) result.show()打印结果 六、统计年龄分布 类似年龄分布的操作。 val sexResult agedf.groupBy(gender).agg(count(consumerName).alias(Count)).sort(desc(Count)) sexResult.show()打印结果 除了以上的统计分析案例之外还有优惠券获取情况和购物动机的关系、消费领域方式等统计可以进一步拓展分析。 本文基于分析消费者行为数据可以入门学习到Spark如何读取样本文件通过map(.split(,))处理样本成一个数组格式的RDD基于该RDD可以进一步通过map、reduceByKey、groupBy等算子做处理与统计最后获取该样本的信息价值。
- 上一篇: 荧光字体制作网站wordpress怎样美化网页
- 下一篇: 营口pc网站开发爱站网官网关键词
相关文章
-
荧光字体制作网站wordpress怎样美化网页
荧光字体制作网站wordpress怎样美化网页
- 技术栈
- 2026年04月20日
-
鹰潭市网站建设建网站需要什么步骤
鹰潭市网站建设建网站需要什么步骤
- 技术栈
- 2026年04月20日
-
英语网站推广策划书做ftp网站怎么设置
英语网站推广策划书做ftp网站怎么设置
- 技术栈
- 2026年04月20日
-
营口pc网站开发爱站网官网关键词
营口pc网站开发爱站网官网关键词
- 技术栈
- 2026年04月20日
-
营口品牌网站建设图片动画制作
营口品牌网站建设图片动画制作
- 技术栈
- 2026年04月20日
-
营口网站建设单位公司网站页面设计思路
营口网站建设单位公司网站页面设计思路
- 技术栈
- 2026年04月20日






